Языковая проблема с общими представлениями на основе даты - PullRequest
1 голос
/ 12 октября 2010

Я изменил код языка с 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>

1 Ответ

4 голосов
/ 12 октября 2010

Общее представление archive_month принимает параметр month_format, который задает директиву strftime (по умолчанию '%b', для сокращенного названия месяца)проанализируйте значение month с помощью.

Проблема в том, что strftime использует POSIX locale процесса, который не установлен собственным механизмом локали Django (которыйэто то, что использует шаблонный фильтр date).Смотрите этот предыдущий вопрос:

Вы можете исправить это одним из двух способов:

  1. Чтобы продолжать использовать текстовые месяцы, установите языковой стандарт POSIX Python, соответствующий Django LANGUAGE_CODE, например, добавив locale.setlocale(locale.LC_ALL, LANGUAGE_CODE) в модуль настроек.Это должно заставить strptime анализировать те же сокращения месяца, что и шаблонный фильтр date.( Примечание: Это предполагает, что вы рассматриваете языковой стандарт установки как статический и не будете использовать что-то вроде LocaleMiddleware для его динамического изменения.)
  2. Для переключения на числовые месяцы (01–12), внесите следующие изменения:
    • archive_month view: (?P<month>\d{2}) и добавьте month_format='%m'
    • шаблон: {{ d|date:"Y/m" }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...