我正在使用 Django 1.5
我在 html 文件中有这段代码
{% for p in latest_posts %}
<li><a href="{% url 'blog:detail' p.id %}">{{p.title}}</a></li>
{% endfor %}
如果我将 p.id 更改为 p.title
{% for p in latest_posts %}
<li><a href="{% url 'blog:detail' p.title %}">{{p.title}}</a></li>
{% endfor %}
然后我收到以下错误
Reverse for 'detail' with arguments '(u'Second post',)' and keyword arguments '{}' not found.
我希望 url 是 /title 而不是 /id。
这是我的 urls.py 文件
urlpatterns = patterns ('',
url(r'^(?P<title>\w+)/$',
PostDetailView.as_view(),
name = 'detail'
),
)
我应该只使用 get_absolute_url 吗?
更新
我添加了 slug 字段,但它仍然不起作用
{% url 'blog:detail' p.slug %}
我得到的错误是
Reverse for 'detail' with arguments '(u'third-post',)' and keyword arguments '{}' not found.
后模型
class Post(models.Model):
title = models.CharField(max_length = 225)
body = models.TextField()
slug = models.SlugField()
pub_date = models.DateTimeField()
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.title
管理员更新了
class PostAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug" : ("title",)}
admin.site.register(Post, PostAdmin)
如果这有效
<a href="{% url 'blog:detail' p.id %}">{{p.title}}</a>
为什么这不起作用
<li><a href="{% url 'blog:detail' p.slug %}">{{p.title}}</a></li>
更新
PostDetailView
class PostDetailView(DetailView):
template_name = 'blogapp/post/detail.html'
def get_object(self):
return get_object_or_404(Post, slug__iexact = self.kwargs['slug'])