Je viens juste de commencer avec Django mais je suis tombé sur un mur - j'ai décidé d'essayer d'écrire un simple moteur de blog en faisant référence à la bibliothèque django-basic-apps.Django newbie - Erreurs NoReverseMatch
Dans blog/urls.py, j'ai cette entrée pour mapper à la publication réelle par date, par exemple. blog/2009/Août/01/test post
urlpatterns = patterns('',
url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$', 'blog.views.post_detail'),
...
Et la vue pour rendre le message:
def post_detail(request, slug, year, month, day, **kwargs):
return date_based.object_detail(
request,
year = year,
month = month,
day = day,
date_field = 'created_at',
slug = slug,
queryset = Content.objects.filter(published=True),
**kwargs
)
Dans le modèle que je mis en œuvre get_absolute_url
pour que l'on la page principale du blog que je pouvais cliquez sur un titre de poste pour l'afficher:
class Content(models.Model):
...
@permalink
def get_absolute_url(self):
return ('blog.views.post_detail',(), {
'slug': self.slug,
'year': self.created_at.year,
'month': self.created_at.strftime('%b').lower(),
'day': self.created_at.day
})
Enfin, dans la liste des articles de la page principale, ce permalien est censé être inséré dans le titre:
{% for content in object_list %}
<div class="content_list">
<h3 class="content_title"><a href="{{ content.get_absolute_url }}">{{ content.title }}</a></h3>
<p class="content_date">{{ content.published_at|date:"Y F d"}}</p>
<p class="content_body">{{ content.body }}</p>
<p class="content_footer">updated by {{ content.author }} at {{ content.updated_at|timesince }} ago</p>
</div>
{% endfor %}
Cependant, le lien apparaît comme vide, et quand je tente d'appeler content.get_absolute_url()
des django shell l'erreur est jeté:
NoReverseMatch: Reverse for '<function post_detail at 0xa3d59cc>' with arguments '()' and keyword arguments '{'year': 2009, 'slug': u'another_test', 'day': 15, 'month': 'aug'}' not found.
Edit: Il s'avère que c'était un problème d'espace de noms Python (voir au dessous de). Mais de toute façon, mon urls.py comme indiqué ci-dessus était-il incorrect?