我使用Django 2.1,Python 3.5和MySql(MariaDB 10)。 本地主机中的所有内容都是正确的,但在实际服务器中,DetailView会引发404错误。请帮我。 我的查看代码是:
class Blog_detail(DetailView):
model = Post
template_name = 'detail.html'
我的网址格式是:
path('blog/<str:slug>/', views.Blog_detail.as_view(), name='detail'),
我的联系是:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
# 'PORT': '3306',
'OPTIONS': {
'charset': 'utf8'
},
}
DetailView结果只能在拉丁URI中正常工作,但在utf-8或Unicode URI中会引发404错误。
答案 0 :(得分:1)
使用FBV代替CBV。
使用以下代码:
from django.shortcuts import get_object_or_404
from django.utils.encoding import uri_to_iri
def blog_detail(request, slug):
post= get_object_or_404(Post, slug=uri_to_iri(slug))
答案 1 :(得分:1)
感谢大家。我找到了问题的答案。我可以使用以下代码:
class BlogDetail(DetailView):
model = Post
template_name = 'detail.html'
def get_object(self, **kwargs):
slug = self.kwargs.get('slug')
return get_object_or_404(Post, slug=uri_to_iri(slug))