1

言語コードを 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>
4

1 に答える 1

4

archive_month汎用ビューは、値を解析するためのディレクティブ (ロケールの省略形の月名のデフォルトは ) を指定するパラメーターを受け取りmonth_formatます。strftime'%b'month

問題は、Django 独自のロケール メカニズム (テンプレート フィルターが使用するもの)によって設定されていないstrftimeプロセスの POSIXロケールを使用することです。この以前の質問を参照してください。date

これは、次の 2 つの方法のいずれかで修正できます。

  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 に答える