2012-02-16 7 views
0

フランス語で設定ファイルにdjangoのWebサイトが設定されました。Djangoの日付変換とURLconf

私のテンプレートでは、私は次のエントリ<a href="/{{ year }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a>を持っています。私のURLconfで

、私はエントリにurl(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/$',MonthArchivePostView.as_view())

を持っている問題は、テンプレートでは、生成された日付はフランス語であるということである(例えば、2月のために、私は<a href="/2012/fév/">Février</a>を持っている)が、URLは英語を期待バージョン(/2012/feb/)。

英語またはフランス語でURLに日付を入れても構いません。テンプレートで生成され、URLconfファイルで期待されるものだけを持つ必要があります。


アップデートクイックフィックスはなく、本当に-ソリューションありがとう:だからurls.pyに代わり/feb/

/02/を持っている代わりにbのどこでもm形式を使用します

url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$', 
    MonthArchivePostView.as_view() 
), 

と汎用ビューで

class MonthArchivePostView(dates.MonthArchiveView): 
    model = Post 
    month_format = '%m' 
    date_field = 'publish' 

答えて

1

@jkbrが既に述べたように、unlocalizeは仕事をするべきです。

さらに、テンプレートにURLを定義するのではなく、入力モデルのモデル定義に関数'get_absolute_url(self)'を追加することを考えたことがありますか?

コンテンツの定義(モデル)とコンテンツのプレゼンテーション(テンプレート)を区別する方がよいでしょう。

また、問題の解決に役立つ可能性があります。あなたのエントリーモデルの終わりに、この1と同様の機能を追加すること

試してみてください。

def get_absolute_url(self): 
    from time import strftime 
    return "%s%s" % (settings.SITE_URL,strftime("%Y/%b/",self.creation_date)) 

私は右のそれを理解してきた場合、これは(動作するはずです、それはなどのデータを表示する代わりに、それを解析について何か、です「B」 ``メートル:?|日付

<a href="{{entry.get_absolute_url}}">{{ month|date:"F" }}</a> 
+0

ありがとうございますが、私はそれをどうやって行うのか分かりません。ジェネリッククラス(私の更新)を使用するので、月アーカイブのモデルは実際にはありません。私はモデルPostを使用しています。ここでは、[here](https://docs.djangoproject.com/ja/dev/ref/models/instances/#django.db.models.permalink)の説明のようなget_absolute_urlを使用します。 –

+0

ジェネリッククラスview [返品](https://docs.djangoproject.com/en/dev/ref/class-based-views/#django.views.generic.dates.YearArchiveView)のみ、DateQuerySetと年、モデルはありません。私はジェネリッククラスを使用していました。なぜなら、それはもっと速くて簡単だと思われていましたが、私はもはやわかりません。また、get_absolute_url [must](https://docs.djangoproject.com/en/1.3/ref/models/instances/#django.db.models.Model.get_absolute_url)にはASCII文字のみが含まれているので、 '/ 2012/Feb/'/ 2012 /fév/'ではない。またはおそらく '/ 2012/f%C3%A9v /'だが、それほど良くない... –

+1

URLにスラッグを使用し、非ASCII文字を避ける方が良いかもしれない。テンプレートタグ[slugify](https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#slugify)は、前述のように 'django.template.defaultfilters'から' slugify'をインポートするモデル定義でも使用できます[ここ](http://stackoverflow.com/a/837835/302076) – dolma33

3

unlocalizeを使用すると、テンプレートのローカライゼーションを避けることができます。

+0

がどのように '月とそれを組み合わせるか:あなたのような何かができるDjangoのドキュメントのFormat localizationセクションで説明した後

をテンプレートに。 onh | unlocalize | date: "b" '空文字列を出力し、' month | date: "b" | unlocalize'は効果がありません(フランス語でも) –

+0

次に試してみてください: '{%localize off%} {{月| date: "b"}} {%endlocalize%} ' –

+0

' {{localize off%} 'は、' {{month}} 'だけでも変わっていません。一方、 '{{month | unlocalize}}'はうまく動作します(正しいフォーマットではありません)。たぶんバグかもしれません –