我已将语言代码从en-us更改为es-ar,并且url开始失败。 示例:当我单击“Agosto 2010”时,URL为“http://mysite.com/weblog/2010/ago/”,服务器无法查找页面。但如果我浏览“http://mysite.com/weblog/2010/aug/,服务器会找到并显示该页面。
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>
答案 0 :(得分:4)
archive_month
通用视图采用month_format
参数,该参数指定strftime
指令(默认为'%b'
,对于语言环境的缩写月份名称)来解析{{} 1}}值与。
问题是month
使用进程的POSIX locale,它是不是由Django自己的语言环境机制设置的(这是strftime
模板过滤器的内容使用)。见前面这个问题:
您可以通过以下两种方式解决此问题:
date
匹配,例如将LANGUAGE_CODE
添加到您的设置模块中。这应该使locale.setlocale(locale.LC_ALL, LANGUAGE_CODE)
解析由strptime
模板过滤器生成的相同月份缩写。 (注意:这假设您将安装的区域设置视为静态,并且不会使用date
之类的内容来动态更改它。)LocaleMiddleware
查看:archive_month
,然后添加(?P<month>\d{2})
month_format='%m'