2010-10-12 62 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