URL перенаправления с первичным ключом DJANGO - PullRequest
2 голосов
/ 15 апреля 2020

Итак, у меня есть список с некоторыми рецептами, и я хочу, чтобы пользователь мог щелкнуть рецепт и быть перенаправлен на просмотр с более подробной информацией. Другими словами, я хочу, чтобы у каждого рецепта был свой URL. Я пытаюсь этот код, как показано ниже, но он не работает, он перенаправляет сторону 404. После нажатия на рецепт.

Моя модель:

class Recipe(models.Model):

  recipe_name = models.CharField(max_length=250)
  preparation = models.CharField(max_length=1000)
  ingredients = models.ManyToManyField(Ingredient)
  recipe_image = models.ImageField(upload_to='images/', default='')


  def __str__(self):
    return self.recipe_name

Вид:

def GenerallView(request):
    lista1 = Recipe.objects.all()
    return render(request, 'drinks/GenerallView.html', {'lista1': lista1})

def DetailView(request, pk):
    lista = get_object_or_404(Recipe, pk=pk)
    return render(request, 'drinks/DetailView.html', {'lista': lista})

URL:

 path('generall_view', views.GenerallView, name='GenerallView'),
 path('detail_view/<int:pk>', views.DetailView, name='DetailView'),

Шаблоны:

общий вид

<ul>
{% for drink in lista1 %}
    <li><a href="{% url 'DetailView' pk=drink.pk %}">{{ drink.recipe_name }}</a></li>
{% empty %}
    <li>No notes yet.</li>
{% endfor %}
</ul>

подробный вид

<h1>{{ drink.recipe.name }}</h1>

1 Ответ

0 голосов
/ 15 апреля 2020

Имя объекта - drink, а не Recipe, поэтому вы должны написать это с {% url 'DetailView drink.pk %}, более того, имя вашего представления будет DetailView, а не detail_view:

<ul>
{% for drink in lista1 %}
    <li><a href="{% url <b>'DetailView' drink.pk</b> %}">{{ drink.recipe_name }}</a></li>
{% empty %}
    <li>No notes yet.</li>
{% endfor %}
</ul>

В DetailView вы также передали переменную с именем lista, поэтому вы должны отобразить это с помощью:

<h1>{{ lista.recipe_name }}</h1>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...