找不到语言时,Django 将错误 500 重定向到 404
Django redirect error 500 to 404 when language not found
我注意到,当在 settings.py 中引用一种语言而网站中没有适当的页面时,它会生成 500 个页面。
例如:
LANGUAGES = (
('en', gettext('English')),
('fr', gettext('French')),
('it', gettext('Italian')),
('es', gettext('Spanish')),
('de', gettext('German')),
('el', gettext('Greek')),
('tr', gettext('Turkish')),
('ja', gettext('Japanese')),
('pt', gettext('Portuguese')),
('ar', gettext('Arabic')),
)
所以,在我的网站上,en
fr
es
de
和 ja
被翻译并出现在网站上。其他人不是。
然后,如果您尝试访问 : example.org/el/whatever 它会引发 500 错误。
我想要一个 404 以便让用户访问该网站。
有人知道这个问题吗?还是我必须从设置中删除语言?
非常感谢。
编辑:这是我收到的有关此错误的报告:
Internal Server Error: /it/blog/
Traceback (most recent call last):
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line 34,
in _handle_no_page
resolve('%s$' % request.path)
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/urlresolvers.py", line 494, in resolve
return get_resolver(urlconf).resolve(path)
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/urlresolvers.py", line 358, in resolve
raise Resolver404({'tried': tried, 'path': new_path})
django.core.urlresolvers.Resolver404: {'tried': [[<RegexURLResolver <module
'autocomplete_light.urls' from
'/var/www/webapps/lib/python3.4/site-packages/autocomplete_light/urls.py'> (None:None) ^autocomplete/>],
[<RegexURLResolver <module 'djangocms_contact.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_contact/urls.py'> (None:None)
^api/contact_plugin/>], [<RegexURLResolver <module 'taggit_autosuggest_select2.urls' from
'/var/www/webapps/lib/python3.4/site-packages/taggit_autosuggest_select2/urls.py'>
(None:None) ^taggit_autosuggest_select2/>], [<RegexURLPattern None
^sitemap\.xml$>], [<RegexURLPattern None ^sitemap-(?P<section>.+)\.xml$>],
[<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>, <RegexURLPattern
None ^share/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None)
^it/>, <RegexURLResolver <module 'djangocms_job.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_job/urls.py'> (None:None)
^api-job_plugin/>], [<LocaleRegexURLResolver <RegexURLPattern list>
(None:None) ^it/>, <RegexURLResolver <RegexURLPattern list> (admin:admin)
^admin/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>,
<RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>, <RegexURLPattern pages-details-by-slug
^(?P<slug>[0-9A-Za-z-_.//]+)/$>], [<LocaleRegexURLResolver <RegexURLPattern
list> (None:None) ^it/>, <RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>,
<RegexURLPattern pages-root ^$>], [<RegexURLResolver <module 'rosetta.urls' from
'/var/www/webapps/lib/python3.4/site-packages/rosetta/urls.py'> (None:None)
^rosetta/>]], 'path': 'it/blog/$'}
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/handlers/base.py", line 111, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line
118, in details
return _handle_no_page(request, slug)
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line 38,
in _handle_no_page
raise exc
django.http.response.Http404: {'tried': [[<RegexURLResolver <module
'autocomplete_light.urls' from
'/var/www/webapps/lib/python3.4/site-packages/autocomplete_light/urls.py'> (None:None) ^autocomplete/>], [<RegexURLResolver
<module 'djangocms_contact.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_contact/urls.py'> (None:None) ^api/contact_plugin/>],
[<RegexURLResolver <module 'taggit_autosuggest_select2.urls' from
'/var/www/webapps/lib/python3.4/site-packages/taggit_autosuggest_select2/urls.py'>
(None:None) ^taggit_autosuggest_select2/>], [<RegexURLPattern None
^sitemap\.xml$>], [<RegexURLPattern None ^sitemap-(?P<section>.+)\.xml$>],
[<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>, <RegexURLPattern None
^share/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None)
^it/>, <RegexURLResolver <module 'djangocms_job.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_job/urls.py'> (None:None)
^api-jo
b_plugin/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None)
^it/>, <RegexURLResolver <RegexURLPattern list> (admin:admin) ^admin/>],
[<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>,
<RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>, <RegexURLPattern pages-details-by-slug
^(?P<slug>[0-9A-Za-z-_.//]+)/$>], [<LocaleRegexURLResolver <RegexURLPattern list>
(None:None) ^it/>, <RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>, <RegexURLPattern
pages-root ^$>], [<RegexURLResolver <module 'rosetta.urls' from
'/var/www/webapps/lib/python3.4/site-packages/rosetta/urls.py'> (None:None) ^rosetta/>]],
'path': '/it/blog/'}
它继续这样(我还有 2 个大段落)从 :
开始
Traceback (most recent call last):
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line 34,
和:
Traceback (most recent call last):
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/handlers/base.py", line 150, in get_response
response = callback(request, **param_dict)
File "/var/www/webapps/proj_website/app/proj/views.py", line 84, in
custom_page_not_found
您的 views.py 似乎出了点问题。
因此您需要在出现问题的情况下执行以下操作:
from django.http import Http404
def your_view(request):
try:
code_that_must_work_but_can_fail="goes here"
except Exception, e:
raise Http404
所以我们在这里所做的只是将所有代码包装在 try: except: 的视图中,所以如果 try 块中出现问题,它将移至 except 块并且有 raise 指令将 return 404 页面。
请在您的模板中创建 404.html 和 500.html,即使有 500
也能有漂亮的页面
我注意到,当在 settings.py 中引用一种语言而网站中没有适当的页面时,它会生成 500 个页面。
例如:
LANGUAGES = (
('en', gettext('English')),
('fr', gettext('French')),
('it', gettext('Italian')),
('es', gettext('Spanish')),
('de', gettext('German')),
('el', gettext('Greek')),
('tr', gettext('Turkish')),
('ja', gettext('Japanese')),
('pt', gettext('Portuguese')),
('ar', gettext('Arabic')),
)
所以,在我的网站上,en
fr
es
de
和 ja
被翻译并出现在网站上。其他人不是。
然后,如果您尝试访问 : example.org/el/whatever 它会引发 500 错误。
我想要一个 404 以便让用户访问该网站。
有人知道这个问题吗?还是我必须从设置中删除语言?
非常感谢。
编辑:这是我收到的有关此错误的报告:
Internal Server Error: /it/blog/
Traceback (most recent call last):
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line 34,
in _handle_no_page
resolve('%s$' % request.path)
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/urlresolvers.py", line 494, in resolve
return get_resolver(urlconf).resolve(path)
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/urlresolvers.py", line 358, in resolve
raise Resolver404({'tried': tried, 'path': new_path})
django.core.urlresolvers.Resolver404: {'tried': [[<RegexURLResolver <module
'autocomplete_light.urls' from
'/var/www/webapps/lib/python3.4/site-packages/autocomplete_light/urls.py'> (None:None) ^autocomplete/>],
[<RegexURLResolver <module 'djangocms_contact.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_contact/urls.py'> (None:None)
^api/contact_plugin/>], [<RegexURLResolver <module 'taggit_autosuggest_select2.urls' from
'/var/www/webapps/lib/python3.4/site-packages/taggit_autosuggest_select2/urls.py'>
(None:None) ^taggit_autosuggest_select2/>], [<RegexURLPattern None
^sitemap\.xml$>], [<RegexURLPattern None ^sitemap-(?P<section>.+)\.xml$>],
[<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>, <RegexURLPattern
None ^share/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None)
^it/>, <RegexURLResolver <module 'djangocms_job.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_job/urls.py'> (None:None)
^api-job_plugin/>], [<LocaleRegexURLResolver <RegexURLPattern list>
(None:None) ^it/>, <RegexURLResolver <RegexURLPattern list> (admin:admin)
^admin/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>,
<RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>, <RegexURLPattern pages-details-by-slug
^(?P<slug>[0-9A-Za-z-_.//]+)/$>], [<LocaleRegexURLResolver <RegexURLPattern
list> (None:None) ^it/>, <RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>,
<RegexURLPattern pages-root ^$>], [<RegexURLResolver <module 'rosetta.urls' from
'/var/www/webapps/lib/python3.4/site-packages/rosetta/urls.py'> (None:None)
^rosetta/>]], 'path': 'it/blog/$'}
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/handlers/base.py", line 111, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line
118, in details
return _handle_no_page(request, slug)
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line 38,
in _handle_no_page
raise exc
django.http.response.Http404: {'tried': [[<RegexURLResolver <module
'autocomplete_light.urls' from
'/var/www/webapps/lib/python3.4/site-packages/autocomplete_light/urls.py'> (None:None) ^autocomplete/>], [<RegexURLResolver
<module 'djangocms_contact.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_contact/urls.py'> (None:None) ^api/contact_plugin/>],
[<RegexURLResolver <module 'taggit_autosuggest_select2.urls' from
'/var/www/webapps/lib/python3.4/site-packages/taggit_autosuggest_select2/urls.py'>
(None:None) ^taggit_autosuggest_select2/>], [<RegexURLPattern None
^sitemap\.xml$>], [<RegexURLPattern None ^sitemap-(?P<section>.+)\.xml$>],
[<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>, <RegexURLPattern None
^share/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None)
^it/>, <RegexURLResolver <module 'djangocms_job.urls' from
'/var/www/webapps/proj_website/app/djangocms_plugins/djangocms_job/urls.py'> (None:None)
^api-jo
b_plugin/>], [<LocaleRegexURLResolver <RegexURLPattern list> (None:None)
^it/>, <RegexURLResolver <RegexURLPattern list> (admin:admin) ^admin/>],
[<LocaleRegexURLResolver <RegexURLPattern list> (None:None) ^it/>,
<RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>, <RegexURLPattern pages-details-by-slug
^(?P<slug>[0-9A-Za-z-_.//]+)/$>], [<LocaleRegexURLResolver <RegexURLPattern list>
(None:None) ^it/>, <RegexURLResolver <module 'cms.urls' from
'/var/www/webapps/lib/python3.4/site-packages/cms/urls.py'> (None:None) ^>, <RegexURLPattern
pages-root ^$>], [<RegexURLResolver <module 'rosetta.urls' from
'/var/www/webapps/lib/python3.4/site-packages/rosetta/urls.py'> (None:None) ^rosetta/>]],
'path': '/it/blog/'}
它继续这样(我还有 2 个大段落)从 :
开始Traceback (most recent call last):
File "/var/www/webapps/lib/python3.4/site-packages/cms/views.py", line 34,
和:
Traceback (most recent call last):
File
"/var/www/webapps/lib/python3.4/site-packages/django/core/handlers/base.py", line 150, in get_response
response = callback(request, **param_dict)
File "/var/www/webapps/proj_website/app/proj/views.py", line 84, in
custom_page_not_found
您的 views.py 似乎出了点问题。
因此您需要在出现问题的情况下执行以下操作:
from django.http import Http404
def your_view(request):
try:
code_that_must_work_but_can_fail="goes here"
except Exception, e:
raise Http404
所以我们在这里所做的只是将所有代码包装在 try: except: 的视图中,所以如果 try 块中出现问题,它将移至 except 块并且有 raise 指令将 return 404 页面。 请在您的模板中创建 404.html 和 500.html,即使有 500
也能有漂亮的页面