2016-01-29 2 views
-2

Я сделал цикл, позволяющий отображать для каждой страницы вопросы и ответы утилиты. Интересно, можно ли в шаблоне «фильтровать», чтобы получить только проблемы на странице 1?Могу ли я использовать фильтр в шаблоне в django?

<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) и я хочу только первый визит, что такое цикл для получения этого? the resultt

Лучшее, что я хотел бы получить это страница, которую я хочу на основе идентификатора

EDIT: 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') 
+1

Это, кажется, дубликат вашего предыдущего вопроса, который был закрыт, потому что было неясно. Это еще не ясно. Если вы хотите, чтобы этот не был закрыт, вам нужно будет действительно объяснить вашу проблему, рассказать нам, что такое «посещение», и прекратить публикацию нечитаемых скриншотов. –

+0

Можете ли вы опубликовать эту страницу? – doru

+0

У меня есть редактирование представлений –

ответ

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 на ваш взгляд через запрос и отправить его затем в шаблон.

EDIT

Как ваш взгляд выглядит

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

получает Page вы хотите. Итак, в шаблоне вы можете использовать его:

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

И возможно ли сделать то же самое, что это займет больше времени, но первый термин, основанный на идентификаторе в URL-адресе? Я положил в свой url pk = instance –

+0

@ JérémyLegendre как ваше представление, переменная 'numPages' должна предоставить вам страницу, которую вы ищете, если параметр' instance' получает 'id'' '' '. Удалите цикл из шаблона и используйте 'numPages' вместо' page'. – doru

Смежные вопросы