僕とコードとブルーハワイ

omega (@equal_001) の日記

Django1.9 admin get_urlsのoverrideでハマってた

get_urlsで正しいっぽいurlpattern渡してるのに、なんでそんなパターン見つからないって怒られるんじゃーとなって先輩とデバッグしてたら、1.9から追加されたという以下のコードに遭遇した。

urlpatterns = [
url(r'^$', wrap(self.changelist_view), name='%s_%s_changelist' % info),
         :
# For backwards compatibility (was the change url before 1.9)
url(r'^(.+)/$', wrap(RedirectView.as_view(
pattern_name='%s:%s_%s_change' % ((self.admin_site.name,) + info)
))),
]

django.contrib.admin.options | Django documentation | Django


つまり、カスタムURLが先に来るように繋げないとで死ぬという感じだった。

    def get_urls(self):
        from django.conf.urls import url

        urlpatterns = super().get_urls()

        urlpatterns = [
            url(r'^somepattern/$', self.admin_site.admin_view(self.my_view), name=''),
        ] + urlpatterns  # ここのリストに入れる順番が今回の問題
        return urlpatterns

    def my_view(self, request):
        return TemplateResponse(request, template , {})

1.9にバージョンアップするときは注意が必要だなぁーと思った。


というかまずよくコード読めという話でした、先輩すみませんでした。。