2010-10-12 63 views
1

我已將en-us的語言代碼更改爲es-ar,並且網址開始失敗。 例如:當我點擊「Agosto 2010」時,URL是「http://mysite.com/weblog/2010/ /」,服務器無法找到該頁面。但是,如果我瀏覽「http://mysite.com/weblog/2010/ /服務器發現並顯示在頁面基於日期的通用視圖的語言問題

urls.py:

urlpatterns = patterns('django.views.generic.date_based', 
     (r'^$', 'archive_index', entry_info_dict, 'coltrane_entry_archive_index'), 
     (r'^(?P<year>\d{4})/$', 'archive_year', entry_info_dict, 
    'coltrane_entry_archive_year'), 
     (r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', entry_info_dict, 
    'coltrane_entry_archive_month'), 
) 

templatetags.py:

@register.inclusion_tag('coltrane/month_links_snippet.html') 
def render_month_links(): 
    return { 
     'dates': Entry.objects.dates('pub_date', 'month'), 
    } 

month_links_snippet.html:

<ul> 
    {% for d in dates reversed %} 
    <li><a href="/weblog/{{ d|date:"Y/b" }}/">{{ d|date:"F Y" }}</a></li> 
    {% endfor %} 
</ul> 

回答

4

archive_month根eric視圖採用month_format參數,該參數指定strftime指令(默認爲'%b',用於區域設置的縮寫月份名稱)以解析month值。

的問題是,strftime使用過程中的POSIX locale,這是通過Django自己的區域機制設置(這是什麼date模板過濾器使用)。看到這個前面的問題:

您可以通過以下兩種方式之一來解決此:

  1. 要繼續使用文字個月,設置Python的POSIX語言環境來匹配Django的LANGUAGE_CODE,對例如通過將locale.setlocale(locale.LC_ALL, LANGUAGE_CODE)添加到您的設置模塊。這應該使strptime解析與date模板過濾器生成的月份縮寫相同的縮寫。 (注:這是假設你把安裝的區域設置爲靜態的,不會使用類似LocaleMiddleware動態地改變它。)
  2. 要切換到數字月份(01-12),做如下修改:
    • archive_month觀點:(?P<month>\d{2}),並添加month_format='%m'
    • 模板:{{ d|date:"Y/m" }}
+0

感謝皮特,就解決ŧ他有問題! – mxm 2010-10-13 18:19:28