What I'm trying to achieve is this: my news application should display slug, but only request an article by id in the form / news / 24 / this-is-the-slug
Unfortunately, I get NoReverseMatch: Reverse for 'news_detail' with arguments '('',)' and keyword arguments '{}' not found. when trying to view an article. The URL generated in the template looks correct as above (I can confirm this by doing a search through Haystack, which delivers the correct URL).
models.py
class News(models.Model): id = models.IntegerField(primary_key=True, editable=False) category = models.CharField(max_length=50L) title = models.CharField(max_length=200L) rss_summary = models.TextField(max_length=2000L) body_text = models.TextField(max_length=5000L) post_date = models.DateTimeField() prettyurl = models.SlugField(max_length=100L) class Meta: db_table = 'news' def __unicode__(self): return self.title def get_absolute_url(self): return urlresolvers.reverse('news_detail', kwargs={'pk': self.id, 'slug': self.prettyurl })
urls.py
urlpatterns = patterns( '', url( r'^$', view=views.NewsListView.as_view(), name='news_index'), url( r'^(?P<pk>\d+)/', view=views.NewsDetailView.as_view(), name='news_detail'), url( r'^(?P<pk>\d+)/(?P<slug>[-\w]+)/$', view=views.NewsDetailView.as_view(), name='news_detail'), url( r'^archive/$', view=views.NewsArchiveIndexView.as_view(), name="archive_month"), [... more unrelated urls ...]
views.py
class NewsDetailView(DetailView):
Template
`<p><a href="{% url 'news_detail' news.slug %}">Permalink</a> for this article.`
weeheavy
source share