2017-07-12 9 views
0

と以下のDjangoビューを呼び出すときに、私はHTTP 410エラーを取得:ジャンゴ:HTTPエラー410(ゴーン)RedirectView

>>> views.py: 

class ReopenMilestoneView(
    dj_auth_mixins.LoginRequiredMixin, dj_views.RedirectView 
): 

    pattern_name = 'bibliotheka_dashboard' 

    def dispatch(self, request, *args, **kwargs): 
     print('DISPATCH BEGIN') 
     instance = project_models.Milestone.objects.get(pk=kwargs['pk']) 
     instance.state = project_models.STATE_OPEN 
     instance.save() 
     print('DISPATCH END') 

     return super(ReopenMilestoneView, self).dispatch(
      request, *args, **kwargs 
     ) 


    def http_method_not_allowed(self, *args, **kwargs): 
     print('HTTP NOT ALLOWED BEGIN') 
     try: 
      return super(ReopenMilestoneView, self).http_method_not_allowed(
       *args, **kwargs 
      ) 
     except: 
      print('EXCEPTION') 
     print('HTTP NOT ALLOWED END') 

    def get_redirect_url(self, *args, **kwargs): 
     print('REDIRECT BEGIN') 
     result = super(ReopenMilestoneView, self).get_redirect_url(
      *args, **kwargs 
     ) 
     print('REDIRECT END, result = ' + str(result)) 
     url = urlresolvers.reverse('bibliotheka_dashboard') 
     url2 = urlresolvers.reverse(self.pattern_name) 
     print('REDIRECT END, URL_resolved = ' + str(url)) 
     print('REDIRECT END, pattern_name = ' + str(self.pattern_name)) 
     print('REDIRECT END, URL_2_resolved = ' + str(url2)) 

     return result 

>>> urls.py: 

... 
    url(
     r'^milestone/dashboard/$', 
     project_views.MilestoneDashboard.as_view(), 
     name='milestone_dashboard' 
    ), 
    url(
     r'^milestone/(?P<pk>[\w-]+)/dashboard/$', 
     project_views.MilestoneDashboard.as_view(), 
     name='milestone_specific_dashboard' 
    ), 
... 

私は三つの方法を介してプリントを加えはジャンゴに記載されている「RedirectView」を形成します通常のワークフローの一部としての文書化(django)。

ディスパッチは正しく実行されますが、自動的に "pattern_name"を解決すると、 "RedirectView"が失敗し...手動で解決して問題を解決します。

DISPATCH BEGIN 
DISPATCH END 
REDIRECT BEGIN 
REDIRECT END, result = None 
REDIRECT END, URL_resolved =/
REDIRECT END, pattern_name = bibliotheka_dashboard 
REDIRECT END, URL_2_resolved =/

Gone: /prj/milestone/2/reopen/ 
[12/Jul/2017 13:28:34] "GET /prj/milestone/2/reopen/ HTTP/1.1" 410 0 

私は以前に "RedirectView"を使用していましたが、このエラーはありませんでした。

from django.conf.urls import url, include 
from django.conf.urls import static as dj_static 
from django.contrib import admin 

from bibliotheka import settings as bibliotheka_settings 
from documentation.views import project as project_views 


urlpatterns = [ 
    url(
     r'^$', 
     project_views.MilestoneDashboard.as_view(), 
     name='bibliotheka_dashboard' 
    ), 
    url(r'^admin/', admin.site.urls), 
    url(r'^accounts/', include('accounts.urls')), 
    url(r'^accounts/', include('allauth.urls')), 
    url(r'^prj/', include('documentation.urls.project')), 
    url(r'^dox/', include('documentation.urls.documents')), 
    url(r'^dox/', include('documentation.urls.discrepancies')), 
] 

if bibliotheka_settings.DEBUG: 
    urlpatterns += dj_static.static(
     bibliotheka_settings.MEDIA_URL, 
     document_root=bibliotheka_settings.MEDIA_ROOT 
    ) 

を私は問題の景色を眺めながら、「/」にリダイレクトしようとしています:Djangoは背中の情報の多くを返すされていない、次のように...

私のURLが定義されています。

答えて

3

Djangoは逆転に失敗していますmilestone_dashboard。 Djangoでは< = 1.11で、NoReverseMatchを消し、410応答を返します。

この動作はDjango 2.0ticket 26911を参照)に変更されているため、Djangoは例外を無音化しません。

pattern_nameを使用すると、Djangoは同じargsとkwargsで逆転しようとします。 pkを含むURLから引数のないURLにリダイレクトしているので、これは必要ありません。

あなたはreverse_lazyurlを設定することができます。

from django.urls import reverse_lazy 

class ReopenMilestoneView(RedirectView): 
    url = reverse_lazy('bibliotheka_dashboard') 
+0

私は私が使用していますDjangoのバージョンをチェックし、Djangoの1.11.1で、その例外は、そのバージョン(> 1.11)でスローされるshould'ntてきましたか? – Ricardo

+1

私が<1.11と言ったとき、私は<1.11.xを意味しました。変更は、マスターブランチ(Django 2.0になります)で行われました。それはバックポートされていないので、Django 1.11.xではありません。 – Alasdair

+0

アプリケーションタグをセミコロンで追加すると、Djangoから次の警告が表示されます。 "?:(urls.W003)URLパターン '^ issue /(?P [/ w /] +)/ author/reopen/'[name =' documentation:issue_author_reopen ']には': 'を含む名前があります。あいまいな名前空間参照を避けるために、コロンを削除してください。どう思いますか? – Ricardo

関連する問題