2010-10-12 5 views
1

J'ai changé le code de langue de en-us à es-ar et l'url a commencé à échouer. Exemple: Lorsque je clique dans "Agosto 2010", l'URL est "http://mysite.com/weblog/2010/ il ya /" et le serveur n'a pas pu trouver la page. Mais si je passe en revue « http://mysite.com/weblog/2010/ août/le serveur trouve et affiche la pageProblème de langue avec les vues génériques basées sur la date

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> 

Répondre

4

Le archive_month gen La vue eric prend un paramètre month_format, qui spécifie une directive strftime (par défaut '%b', pour le nom du mois abrégé du paramètre régional) afin d'analyser la valeur month avec.

Le problème est que strftime utilise le processus de locale POSIX, qui est pas fixé par propre mécanisme de paramètres régionaux de Django (qui est ce que le filtre modèle date utilise). Voir cette question précédente:

Vous pouvez résoudre ce problème dans l'une des deux façons:

  1. Pour continuer à utiliser des mois de texte, définissez les paramètres régionaux POSIX Python pour correspondre Django LANGUAGE_CODE, pour exemple en ajoutant locale.setlocale(locale.LC_ALL, LANGUAGE_CODE) à votre module de paramètres. Cela devrait faire strptime analyser les abréviations du mois même produites par le filtre modèle date. (Note: Cela suppose que vous traitez les paramètres régionaux de l'installation comme statique, et ne pas utiliser quelque chose comme LocaleMiddleware changer dynamiquement.)
  2. Pour passer à mois numériques (01-12), effectuez les modifications suivantes:
    • archive_month vue: (?P<month>\d{2}), et ajouter month_format='%m'
    • modèle: {{ d|date:"Y/m" }}
+0

Merci Piet, qui a résolu t Le problème! – mxm

Questions connexes