【问题标题】:Can i use a filtre in a template in django?我可以在 django 的模板中使用过滤器吗?
【发布时间】:2016-05-07 02:03:16
【问题描述】:

我制作了一个循环,允许我为每个页面显示问题和答案用户。 我想知道是否可以在模板中“过滤”以仅获取第 1 页的问题?

<form action="" method="GET">
{{ form.as_p }}


{% for page in pages %}<hr>
    {{ page }}: 

    <br>{% for reply in  page.reply_set.all %}<br> {{ reply.question }} --> {{ reply.answer }} (Author : {{ reply.user }}) {% endfor %}
{% endfor %}

我有一个字段ManytoMany,所以这很难理解......

class Question(models.Model):
    label = models.CharField(max_length=30)

    def __str__(self):
            return self.label


class Page(models.Model):
    title = models.CharField(max_length=30)

    def __str__(self):
        return self.title

class Reply(models.Model):
    page = models.ManyToManyField(Page)
    question = models.ForeignKey(Question)
    user = models.ForeignKey(Personne)
    answer = models.CharField(max_length=30)
    creationDate = models.DateTimeField(default=timezone.now(),blank=True, verbose_name="Date de création") 

    def __str__(self):
        return str(self.answer)

您可以在此屏幕截图中看到我有树页面('名称访问 1 访问 2 访问 3),我只想要第一次访问获取此内容的循环是什么?

我会得到最好的页面是我想要的基于 id 的页面

编辑:views.py

def access(request,instance):
    replies = Reply.objects.all()
    questions = Question.objects.values()
    logged_user = get_logged_user_from_request(request)
    numPages = Page.objects.get(pk=instance)
    pages = Page.objects.all()
    # pagesfilter = Page.objects.get(pk=instance).reply_set.all()
    form = ReplyForm(request.GET)
    personnes = Personne.objects.all()
    if logged_user:
        if len(request.GET) > 0:
            form = ReplyForm(request.GET)
            if form.is_valid():
                form.save(commit=True)
                return HttpResponseRedirect('/reply')
            else:
                return render_to_response('polls/access.html', {'pagesfilter':pagesfilter, 'numPages': numPages, 'personnes': personnes, 'replies': replies, 'questions': questions,'pages':pages, 'form': form})
        else:
            form = ReplyForm()
            return render_to_response('polls/access.html', {'pagesfilter':pagesfilter, 'numPages': numPages, 'personnes':personnes, 'replies': replies, 'questions': questions, 'pages':pages, 'form': form})
    else:
        return HttpResponseRedirect('/login')

【问题讨论】:

  • 这似乎与您之前的问题重复,该问题因不清楚而被关闭。 仍然不清楚。如果你想避免这个被关闭,你需要真正解释你的问题,告诉我们什么是“访问”,并停止发布不可读的屏幕截图。
  • 你能发布这个页面的视图吗?
  • 我已编辑视图

标签: django forms many-to-many


【解决方案1】:

如果您知道visit1 是循环中的第一个元素,您可以这样做:

{% for page in pages %}<hr>
  {% if forloop.first %}
   {{ page }}: 

    <br>{% for reply in  page.reply_set.all %}<br> {{ reply.question }} --> {{ reply.answer }} (Author : {{ reply.user }}) {% endfor %}
  {% endif %}
{% endfor %}

但我认为最好的方法是通过查询在您的视图中获取visit1,然后将其发送到模板。

编辑

如你所见

numPages = Page.objects.get(pk=instance)

得到你想要的Page。所以,在模板中你可以使用它:

{{ numPage }}
{% for reply in  numPage.reply_set.all %}
    {{ reply.question }}--> {{ reply.answer }}(Author : {{ reply.user }})
{% endfor %}

【讨论】:

  • 是否可以做同样的事情,只是它需要更长的时间,但第一个术语是基于 url 中的 id 吗?我输入了我的网址 pk=instance
  • @JérémyLegendre 如您所见,如果instance 参数获取PageidnumPages 变量应该为您提供您正在寻找的页面。从模板中删除循环并在那里使用numPages 而不是page
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 2023-03-10
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 2021-12-31
  • 2012-07-20
相关资源
最近更新 更多