NoReverseMatch

Le problème exposé dans ce sujet a été résolu.

Bonsoir,

J'utilise pour la première fois les slugs dans Django. Je m'en sortais pas trop mal jusqu'à ce que je décide de mettre les urls de mes articles dans mes templates. Depuis, j'obtiens l'erreur suivante :

1
Reverse for 'view_article' with arguments '()' and keyword arguments '{'slug': 'mes-debuts-en-aquariophilie'}' not found. 1 pattern(s) tried: ['article/(?P<slug>\\d+)$']

Voici mon blog/urls.py :

1
2
3
4
5
6
7
8
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^article/(?P<slug>\d+)$', views.view_article, name='view_article'),
    url(r'^category/(?P<slug>\d+)$', views.view_category, name='view_category')
]

Voici mon models.py (un peu raccourci) :

1
2
3
4
5
6
class Article(models.Model):
    title = models.CharField(max_length=100, unique=True, verbose_name='titre')
    slug = models.SlugField(max_length=100, unique=True, verbose_name='slug')
    body = models.TextField(verbose_name='contenu')
    posted = models.DateField(db_index=True, auto_now_add=True, verbose_name='date de création')
    category = models.ForeignKey('blog.Category', verbose_name='Catégorie')

Voici la fonction views.view_article qui pose problème :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def index(request):
    return render_to_response('blog/index.html', {
        'categories': Category.objects.all(),
        'articles': Article.objects.all()
    })

def view_article(request, slug):
    return render_to_response('blog/view_post.html', {
        'article': get_object_or_404(Article, slug=slug)
    })

Et voici la ligne qui importe l'url de l'article :

1
<a href="{% url "view_article" slug=article.slug %}" class="btn btn-default">Continuer la lecture</a>

Je ne comprend pas d'où vient le problème… Il y a t-il des conséquences à l'utilisation des slugs que je n'aurais pas prises en compte ?

Merci pour votre aide, Joyeuses fêtes. :)

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte