我的models.py
文件看起来像这样
from django.db import models
from django.template.defaultfilters import slugify
class Entertainmentblog(models.Model):
slug = models.SlugField(max_length=100)
body = models.TextField()
posted = models.DateTimeField('date published')
img_url0 = models.CharField(max_length=100)
img_alt0 = models.CharField(max_length=100)
title1 = models.CharField(max_length=100)
title2 = models.CharField(max_length=100)
def save(self):
super(Entertainmentblog, self).save()
self.slug = '%i-%s' % ( self.id, slugify(self.slug) )
super(Entertainmentblog, self).save()
我的应用程序 urls.py
文件如下所示
from django.conf.urls import patterns, url
from entertainment import views
urlpatterns = patterns('',
url(r'^$', views.ListView.as_view(), name='index'),
url(r'^(?P<slug>[^\.]+),(?P<id>\d+)/$', views.DetailView.as_view(), name='article'),
)
但这会产生错误。
Exception Value: Reverse for 'article' with arguments '(u'what-is-happening',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'entertainment/(?P[^\.]+),(?P\d+)/$']
我的view.py
文件
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views import generic
from entertainment.models import Entertainmentblog
class ListView(generic.ListView, slug, id):
template_name = 'entertainment/index.html'
context_object_name = 'latest_article_list'
def get_queryset(self):
return Entertainmentblog.objects.order_by('-posted')[:25]
class DetailView(generic.DetailView):
model = Entertainmentblog
template_name = 'entertainment/article.html'
如何纠正这个问题?
最佳答案
哦,你的观点有严重问题:
第一:
class ListView(generic.ListView, slug, id)
应该是
class ListView(generic.ListView)
第二:
slug
和 id
必须是 View 的类成员,以便您可以像这样重新定义 View :
class ListView(generic.ListView):
template_name = 'entertainment/index.html'
context_object_name = 'latest_article_list'
slug = None
id = None
def get_queryset(self):
return Entertainmentblog.objects.order_by('-posted')[:25]
第三:
您将派生类命名为其父类。我不知道这样做的含义,但肯定不是一个好的做法。
最后:
您收到的错误是因为 views.DetailView.as_view()
返回的 View (记住 DetailView
是您的派生类)不接收参数你正在通过网址。检查您的网址,我可以在提示的错误中看到参数 (u'what-is-happening',)
但没有 id
。例如,它应该类似于 (u'what-is-happening', '4')
关于python - 如何使用 slug 形成 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206340/