2013-04-25 2 views
1

에 따라 :URL 및 데이터베이스 라우팅 나는 다음과 같은 형태의 URL이 언어

http://example.com/[language_code]/xxx 

내가 수행해야합니다 언어 코드를 기반으로
1. 내가 적절한 DB를 선택하거나 HTTP 404을 제기 할 언어 코드가 지원되지 않는 경우.
2. 언어 코드를 요청 개체에 저장하고 싶습니다. 템플릿에 액세스 할 수 있도록하는 것이 좋습니다.
3.이처럼 보이지 않는 내 urls.py를 싶습니다 오히려

url(r'^(?P<lang>\w+)/xxx/$', 'my_app.views.xxx') 

하지만을 :

url(r'^xxx/$', 'my_app.views.xxx') 

그래서 장고 완전히 URL의 언어 코드를 무시합니다.

누군가가 장고와 함께 할 수 있는지 말해 줄 수 있습니까 아니면 다른 해결책을 찾아야합니까?

+0

당신이 국제화 및 번역에 대한 설명서를 읽고 : 2 - 그것은이 문서에 설명 된 것 - 3 @request.LANGUAGE_CODE

사용하여 액세스 할 수 있습니까? https://docs.djangoproject.com/en/dev/topics/i18n/translation/#internationalization-in-template-code –

+0

고맙습니다 - 3 번째 질문을 해결합니다. 다른 사람들에 대해 어떤 생각을 갖고 있습니까? – matino

답변

2

나는 이것을 알아낼 수 있었다. 우선 당신이 문서 읽을 필요가 : https://docs.djangoproject.com/en/dev/topics/i18n/translation/

1 @를 - 나는 http://djangosnippets.org/snippets/2037/에 따라 내 자신의 미들웨어를 썼다

import threading 
from django.http import Http404 
from django.conf import settings 

request_cfg = threading.local() 


class RouterMiddleware(object): 
    def process_view(self, request, view_func, view_args, view_kwargs): 
     lang = request.LANGUAGE_CODE 
     if lang in settings.LANGUAGES: 
      request_cfg.lang = lang 
     else: 
      raise Http404() 

    def process_response(self, request, response): 
     if hasattr(request_cfg, 'lang'): 
      del request_cfg.lang 
     return response 


class DatabaseRouter(object): 
    def _default_db(self): 
     if hasattr(request_cfg, 'lang') and request_cfg.lang in settings.DATABASES: 
      return request_cfg.lang 
     else: 
      return 'default' 

    def db_for_read(self, model, **hints): 
     return self._default_db() 

    def db_for_write(self, model, **hints): 
     return self._default_db() 

(그것은 MIDDLEWARE_CLASSES 목록에서 첫 번째로이 미들웨어를 넣어 결정적) @https://docs.djangoproject.com/en/dev/topics/i18n/translation/#internationalization-in-url-patterns

관련 문제