[英]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中的view:except中:因此,如果somethng在try塊中出錯,它將移至except塊,並且有raise指令返回404頁面。 請在模板中創建404.html和500.html,即使有500個頁面也要有漂亮的頁面
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.