2013-03-06 46 views
0

只有當用戶選擇英文時,我纔有必要在此處輸入www.example.com/something/something/www.example.com/en/something/something/根據用戶選擇的語言進行網址重寫

這是一個現有的網站已完成在Django的URL與正常的部分完成。現在,如果用戶選擇英文,我必須重寫網址。

我以爲我可以手動啓動改變Django模板所有的URL像這樣

{% if request.session.language == 'en' %} 
    <a href="/en/something"..> 
{% else %} 
    <a href="/something"..> 
{% endif %} 

但我一直要求不要做這種方式的鏈接的數量實在是太多了做這樣。

後來我想嘗試一個自定義的中間件,在那裏我可以訪問請求對象process_request,做return HttpResponsePermanentRedirect(redirect_url)

但似乎process_request處理所有的請求一個接一個,包括圖像等各個環節。但我想要的是第一個請求,即請求的實際url。

所以我在中間件的構造函數中嘗試了相同的操作,希望它只會被調用一次,那將是第一個請求。但我面臨的問題是,__init__只接受self**args而不是request對象,所以我無法訪問那裏的會話變量。

我想過在apache中嘗試這種方式,但只有在用戶選擇英文語言時,我才需要執行url重定向。

回答

2

一旦您從文檔中讀取internationalization in django urls patterns,您將會意識到它是一個簡單的過程。

  1. 更新您的urls.py

    from django.conf.urls.i18n import i18n_patterns 
    
    urlpatterns += i18n_patterns('', 
        url(r'^something/$', 'something.view', name='something'), 
        # other urls like you would normally have 
    ) 
    
  2. 確保django.middleware.locale.LocaleMiddleware在你settings.pyMIDDLEWARE_CLASSES部分。

就是這樣。現在您的模式將根據用戶選擇的語言進行更新。

+0

Burhan Khalid先生非常感謝你。我會立即嘗試,並讓你知道。再次感謝 – 2013-03-06 07:17:08

+0

我可以問一下,這個可以在url中做「i18n_patterns」嗎?這是我第一次看到,只是想學習新東西:) – catherine 2013-03-06 07:20:58

+0

您好先生Burhan,我使用的是django 1.3,它會拋出一個導入錯誤,如果我從django.conf.urls.i18n導入i18n_patterns – 2013-03-06 07:26:14