0

アプリで get_absolute_url 定義を更新していたところ、何らかの理由で機能しなくなりました。その理由を正確に把握することはできませんでした。さらに奇妙なことに、ローカル マシンではすべて正常に動作しますが、サーバー (Webfaction) では動作しません。

機能した元のコードは次のとおりです。

def get_absolute_url(self):
    return "/blog/%s/%02d/%02d/%s/" % (self.publication_date.year, self.publication_date.month, self.publication_date.day, self.URL)

私はそれを次のように変更しました:

def get_absolute_url(self):
    return reverse('blog-post', args=[
        self.publication_date.year, 
        self.publication_date.month, 
        self.publication_date.day, 
        self.URL
        ])

黙って失敗しました。管理画面の [サイトで表示] リンクをクリックすると、次のエラーが表示されました。

Reverse for 'blog-post' with arguments '(2013, 7, 19, 'some-test-slug')' and keyword arguments '{}' not found.

代わりにキーワード引数を使用してみました:

def get_absolute_url(self):
    return reverse('blog-post', kwargs={
        'year': self.publication_date.year, 
         ...
        })

...しかし、それは何の影響もありませんでした。

覚えておいてください、奇妙なことは、私のローカル環境ではすべてがうまくいっているということです.

これには Django 1.3.7 を使用します。

ご協力いただきありがとうございます。

urls.py は次のとおりです。

urlpatterns = patterns('blog.views',
    ...
    url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[a-zA-Z0-9_.-]+)/$', 'post', name='blog-post'),
    ...
)
4

1 に答える 1

1

推測urls.pyすることしかできませんが、ほとんどの場合、2 桁の月と日の識別子が必要ですが、場合によっては 1 桁しか提供しません。とにかく - それはあなたの古いコードとあなたの新しいget_absolute_urlコードの違いです - 古いコードの月と日の数字で、必要に応じて 0 で埋められます。

これを試して:

def get_absolute_url(self):
    return reverse('blog-post', args=[
        self.publication_date.year, 
        self.publication_date.strftime('%m'), 
        self.publication_date.strftime('%d'), 
        self.URL
        ])
于 2013-10-13T19:44:51.580 に答える