1

我已将语言代码从 en-us 更改为 es-ar 并且 url 开始失败。示例:当我单击“Agosto 2010”时,URL 为“http://mysite.com/weblog/2010/ ago /”,服务器找不到该页面。但是,如果我浏览“http://mysite.com/weblog/2010/aug/” 服务器会找到并显示该页面。

网址.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'),
)

模板标签.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

1 回答 1

4

archive_month通用视图采用一个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" }}
于 2010-10-12T15:40:39.207 回答