gpt4 book ai didi

django - 在 URL 中同时显示 slug 和 ID,但仅在 Django 中按 ID 路由

转载 作者:行者123 更新时间:2023-12-04 12:32:10 25 4
gpt4 key购买 nike

我想要实现的是:我的新闻应用程序应该显示一个 slug,但只能以 的形式通过 ID 查询文章。/news/24/this-is-the-slug

不幸的是,我收到了 NoReverseMatch: Reverse for 'news_detail' with arguments '('',)' and keyword arguments '{}' not found.尝试浏览文章时。如上所述,模板中生成的 URL 看起来是正确的(我可以通过 Haystack 进行搜索来确认这一点,它提供了正确的 URL)。

模型.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 ...]

View .py
class NewsDetailView(DetailView):
#name='news_detail'),
model = News
context_object_name = 'news'
#slug_url_kwarg = 'prettyurl'
#slug_field = 'prettyurl'
template_name = 'news/detail.html'

模板
`<p><a href="{% url 'news_detail' news.slug %}">Permalink</a> for this article.`

最佳答案

感谢@Daniel Roseman 和@yuvi。在您的帮助下,我设法通过将 URL 模式定义为以下内容来解决我的问题:

r'^(?P<pk>\d+)(?:/(?P<slug>[\w\d-]+))?/$',

这允许我所有想要的形式
  • 新闻/NN
  • 新闻/nn/
  • 新闻/nn/a-slug
  • 新闻/nn/a-slug/

  • 在模板中,我使用
    {% url 'news_detail' news.id news.prettyurl %}

    其中显示了上面列表中的第四个版本。

    再次感谢!

    关于django - 在 URL 中同时显示 slug 和 ID,但仅在 Django 中按 ID 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827884/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com