我最近一直在创建一个Hackernews类型克隆,并且在添加更易读的URL时遇到了一些麻烦。我相信它从我所读过的内容中称为Slug。
基本上,我的网址读取的内容如下:localhost / 1 /,localhost / 2 /取自Category模型。而不是读取/ 1 /,/ 2 / etc,我更喜欢它取class_name字段并填充url。例如localhost / engineering,localhost / science。
这是我的类别模型:
models.py
class Category(models.Model):
category_name = models.CharField(max_length = 50)
created_at = models.DateTimeField(auto_now_add = True)
updated_at = models.DateTimeField(auto_now = True)
def __unicode__(self):
return self.category_name
class Meta:
verbose_name_plural = "categories"
这是我目前的url.py:
url.py
url(r'^(?P<category_id>[0-9]+)/$', 'stories.views.category'),
和我的views.py:
views.py
def category(request, category_id=1):
template = 'stories/category.html'
category = Category.objects.get(id = category_id)
return render_to_response(template, {
'category': category
})
我应该如何实施这样的事情?我已经阅读了有关Slugify的内容,但却无法让它正常运行。谢谢。
答案 0 :(得分:2)
你的urls.py应该是,
url(r'^(?P<category_name>\w+)/$', 'stories.views.category'),
虽然,views.py应该是类似的,
def category(request, category_name):
template = 'stories/category.html'
category = Category.objects.get(category_name = category_name)
return render_to_response(template, {
'category': category
})
以上,如果你没有使用slugified category_name可能会有效。如果这样做,那么请使用this stack overflow answer
中提到的模型中的slug字段