2010-06-07 3 views
8

장고 localeURL는 WSGIScriptAlias은 PREFIX

소개 내가 localeURL 사용에 대한 질문이 있나요/때. 다 같이 URL에 나를 위해 좋은 작품 : 나는 주소 표시 줄에 http://www.example.com/을 입력 할 경우, 예를 들어 http://www.example.com/EN/에서 제대로집니다 http://www.example.com/

  • . 내가보기 change_locale를 사용하는 경우

  • , 모든 권리 (예 : 변경 www.example.com/ 은/www.example.com/ 에/ 도중 FR)도 있습니다.

문제

하지만 mod_wsgi에와 서버로 내 응용 프로그램 사용 아파치.

WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi 

이 같은 URL을 제공합니다 :는 httpd.conf 스크립트는이 줄을 포함 http://www.example.com/en/
http://www.example.com/MY_PREFIX/

change_locale보기에서 같은 문제가 발생했습니다. 나는이 접두사 (settings.SERVER_PREFIX에 저장)를 관리하기 위해이 코드를 수정 :이 사용자 정의보기에

def change_locale(request) : 
    """ 
    Redirect to a given url while changing the locale in the path 
    The url and the locale code need to be specified in the 
    request parameters. 
    O. Rochaix; Taken from localeURL view, and tuned to manage :    
     - SERVER_PREFIX from settings.py 
    """ 
    next = request.REQUEST.get('next', None) 
    if not next: 
     next = request.META.get('HTTP_REFERER', None) 
    if not next: 
     next = settings.SERVER_PREFIX + '/' 

    next = urlsplit(next).path 

    prefix = False 
    if settings.SERVER_PREFIX!="" and next.startswith(settings.SERVER_PREFIX) : 
     prefix = True 
     next = "/" + next.lstrip(settings.SERVER_PREFIX) 

    _, path = utils.strip_path (next) 

    if request.method == 'POST': 
     locale = request.POST.get('locale', None) 
     if locale and check_for_language(locale): 
      path = utils.locale_path(path, locale) 

    if prefix : 
     path = settings.SERVER_PREFIX + path 

    response = http.HttpResponseRedirect(path) 
    return response 

을, 내가 제대로 언어를 변경할 수 있어요,하지만 난 그 오른쪽 방법입니다 확실하지 않다 물건을.

질문

    우리가 여기 (변수를 사용하여 파이썬 측에 필요합니까, 당신은/접두사 (예 : "/ 블로그")로 WSGIScriptAlias를 사용을 httpd.conf에서,
  1. settings.SERVER_PREFIX) WSGIScriptAlias와 일치합니까? 나는 MEDIA_URL과 다른 것들을 위해 그것을 사용하지만 어쩌면 거기에 "파이썬"측면에서 이것을 관리하지 않고 "자동"작업을 할 수있는 몇 가지 구성이 있습니다

  2. 이 사용자 정의보기 (change_locale)가 있다고 생각합니까? 이 문제를 올바르게 관리하는 방법은 무엇입니까? 아니면 1과 같이 어떤 종류의 자동 재능이 있습니까?

  3. 주소 표시 줄에 주소 (http://www.example.com/MY_PREFIX/)를 입력해도 문제가 해결되지 않습니다. 커스터마이즈가가는 길이라면 이것도 바꿀 것입니다. 그러나 더 나은 해결책이 있다고 생각합니다!기본적으로

     
    WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1 
    
    아이디어의 장고가 접두사

    이 없다는 것을 생각하게하지만 당신은 확실히 장고가를 방출 할 필요가 :

+0

localeURL 코드 저장소와 관련이있는 것 같습니다. http://bitbucket.org/carljm/django-localeurl/issue/10/wrong-redirection-url –

답변

0

(나는 그것이 비록 작동 여부를 확실하지 않다)이 시도 HTML 출력에서 ​​URL을 수정하십시오.

3

설정에서 SERVER_PREFIX를 하드 배선하지 않아야합니다. 사이트의 마운트 접두사는 WSGI environ 사전에서 SCRIPT_NAME로 사용할 수 있습니다. 따라서 메모리에서 request.META.get ('SCRIPT_NAME')으로 사용할 수 있습니다.

+0

이 프로젝트에서는 더 이상 작동하지 않지만 소리가납니다. 좋은 리드! –