Vous n'êtes pas identifié(e).
bonjour à toutes et tous,
Environnement :
1- Python version 3.4
2- Django version 2.0
Problème :
J'utilise le tag {% url ....%} pour faire de la redirection dans un template.
Voici le code dans le template :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Blog</title>
</head>
<body>
<h1>la liste des posts</h1>
{% for post in object_list %}
Titre : {{ post }} {{ post.pk }}
<a href="{% url 'blog:detail' '{{ post.pk }}' %}">detail</a>
<br />
{% endfor %}
<hr>
<a href="{% url 'blog:home' %}">home</a>
</body>
</html>
voici le code URLS
urlpatterns = [
path('', home, name='home'),
path('liste/', ListView.as_view(model=Post), name='liste'),
path('post/<int:pk>/detail/', post, name='detail'),
]
voici le code Views
def post(request, pk=1):
cepost = Post.objects.get(pk=pk)
context = {'post': cepost}
return render(request, 'blog/post.html', context)
les résultats :
<a href="{% url 'blog:home' %}">home</a> : celle-ci fonctionne très bien. Un namespace "blog" et une URL nommée "home", tout est simple et parfait.
<a href="{% url 'blog:detail' '{{ post.pk }}' %}">detail</a> : celle-là ne fonctionne pas et génère l'erreur suivante :
django.urls.exceptions.NoReverseMatch: Reverse for 'detail' with arguments '('{{ post.pk }}',)' not found. 1 pattern(s) tried: ['blog\\/post\\/(?P<pk>[0-9]+)\\/detail\\/$']
Après vérification dans la doc Django 2.0 et sur de nombreux site, je ne vois pas où est l'erreur!!!!
Ai-je manqué quelque chose?
Si quelqu'un-e à une idée, je suis preneur. Merci
Domicode, Québec
En toutes circonstances, gardez le sourire !
Hors ligne
"{% url 'blog:detail' post.pk %}" devrait marcher. le {{}} ne sert que lorsque que tu es dans le template, à l'exclusion des tags.
Hors ligne
salut,
je viens de modifier mon code en fonction de ta remarque et ...
tout fonctionne à merveille.
merci pour le coup de main.
Domicode, Québec
En toutes circonstances, gardez le sourire !
Hors ligne