Как передать параметр в текущем URL-адресе в шаблон html в Django 3 - PullRequest
0 голосов
/ 27 мая 2020

Имею:

Mov ie Модель

    class Movie(models.Model):
       title = models.CharField(max_length=255)
       synopsis = models.TextField()
       author = models.ForeignKey(
           get_user_model(),
           on_delete=models.CASCADE,
       )
       def __str__(self):
           return self.title

       def get_absolute_url(self):
           return reverse('movie_detail', args=[str(self.id)])

Модель обсуждения

class Discussion(models.Model):
   title = models.CharField(max_length=255)
   body = models.TextField()
   author = models.ForeignKey(
       get_user_model(),
       on_delete=models.CASCADE,
   )
   date = models.DateTimeField(auto_now_add=True, null=True, blank=True)
   movie = models.ForeignKey(
       Movie,
       on_delete=models.CASCADE,
       related_name='discussion',
   )

   def __str__(self):
       return self.title

   def get_absolute_url(self):
       return reverse('discussion_detail', args=[str(self.movie.id), str(self.id)])

DiscussionListView

class DiscussionListView(LoginRequiredMixin, ListView):
   model = Discussion
   template_name = 'discussion_list.html'
   login_url = 'login'

И еще я есть список_обсуждений. html

Вот что я хочу:

  1. Я в URL /article/1/discussion/. Целое число 1 равно movie_pk, потому что URL-адрес определяется как /article/<int:movie_pk>/discussion/, который в данном случае относится к ключу приоритета модели Mov ie, например, StarWars I. Это страница со списком заголовков обсуждений. связанный с этим mov ie. (Это уже достигнуто)
  2. Есть кнопка «Создать», где, если я нажму на нее, я буду перенаправлен в / article / 1 / обсуждение / new. Там я могу создать новое обсуждение. (Функция, которую я хочу добавить)

Однако: в списке_обсуждений. html нам требуется, чтобы тег url {% url discussion_new %} имел параметр, поскольку discussion_new определяется как /article/<int:movie_pk>/discussion/new

Таким образом: как передать movie_pk с текущего URL-адреса, затем в DiscussionListView, а затем в список_обсуждений шаблона. html?

Ответы [ 2 ]

0 голосов
/ 27 мая 2020
От
              {% url discussion_new %} 

до

            {% url "discussion_new"  pk=movie_pk%} 

И в списке

        {% for m in movie_list %}
            {% url "discussion_new" movie_pk=m.pk %}
        {% endfor %}
0 голосов
/ 27 мая 2020

В шаблоне подробного представления вы можете отправить object.id в качестве параметра url:

#template
{% url "discussion_new" movie_pk=object.pk %}

Если вы находитесь в шаблоне представления списка, то, вероятно, у вас есть al oop на go через все object_list. Там можно реализовать вот так:

{% for object in object_list %}
   {% url "discussion_new" movie_pk=object.pk %}
{% endfor %}
...