Django DetailView引发404在实际服务器中未找到错误

时间:2019-03-22 16:59:16

标签: mysql django mariadb

我使用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错误。

2 个答案:

答案 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))