1

が見つかりません私は、メインurls.pyファイル以下に私のプロジェクトを持っている:私は私のローカルサーバーに呼び出して、私のブラウザに入力すると、ここまではジャンゴ休憩フレームワーク - メインのURLのHTTP/1.1" 404

# REST Framework packages 
from rest_framework import routers 
router = routers.DefaultRouter() 

# ... My viewsets serialized 
router.register(r'users', UserViewSet) 
# ... Another viewsets 
urlpatterns = [ 

    url(r'^$', HomeView.as_view(), name='home'), 
    # Home url in my project   

    url(r'^', include('userprofiles.urls')), 
    # Call the userprofiles/urls.py application 

    url(r'^pacientes/', include('userprofiles.urls', namespace='pacientes')), 
    # Patients url 

    url(r'^api/', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
    # Rest frameworks urls 
] 

[08/Dec/2016 16:39:42] "GET /api/ HTTP/1.1" 200 7084 

そして、私のREST url'sシリアル化されたモデルは、私は1件のURLの追加を作成した後、

を表示されます。http://localhost:8000/api/は、私はこのような応答を取得しますこの方法のいくつかの正規表現とuserprofiles/urls.pyアプリケーション内のアル:

from .views import PatientDetail 
urlpatterns = [ 
    url(r'^(?P<slug>[\w\-]+)/$', PatientDetail.as_view(), name='patient_detail'), 

] 

そして、私がhttp://localhost:8000/api/に行くとき、私はこの応答を取得:

Not Found: /api/ 
[08/Dec/2016 16:42:26] "GET /api/ HTTP/1.1" 404 1753 

私の残りの部分は、URLをフレームワークを見つけて、私のブラウザではありません

enter image description here

マイPatien:、PatientDetailViewに呼び出すURLは、この問題の起源であることを示しますuserprofiles/urls.pyで定義された私の正規表現で

class PatientDetail(LoginRequiredMixin, DetailView): 
    model = PatientProfile 
    template_name = 'patient_detail.html' 
    context_object_name = 'patientdetail' 

    def get_context_data(self, **kwargs): 
     context=super(PatientDetail, self).get_context_data(**kwargs) 
    # And other actions and validations here in forward ... 

を私がやっている:

url(r'^(?P<slug>[\w\-]+)/$', PatientDetail.as_view(), name='patient_detail') 

モデルPatientProfileはslugフィールド(患者のユーザ名を)持っているtDetailViewは以下があります。私はこのスラグをURLに渡します。

さらに、[\w\-]パラメータで英数字を大文字と小文字にすることができます。また、アンダースコアとハイフンの文字を何度も使用できます。

正規表現が問題の原因になる可能性はありますか? /api django-restframeworkのURLに関連して何が起こる可能性がありますか?

答えて

1

apiは、 'userprofiles.urls'で使用している正規表現[\w\-]+の完全一致です。したがって、http://localhost:8000/api/と入力すると、Djangoは最初に見つかったurlpatternを返します。これはurl(r'^', include('userprofiles.urls'))です。行を交換してみてください:

url(r'^pacientes/', include('userprofiles.urls', namespace='pacientes')), 
# Patients url 
url(r'^api/', include(router.urls)), 
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
url(r'^', include('userprofiles.urls')), 
1

あなたがあなたのURLを定義する順序は重要です。 DjangoはあなたのURLのどれかが一致するまであなたのURLをあらゆるパターンと照合しようとします。あなたはこの行を含め

注:

url(r'^', include('userprofiles.urls')), 

前:

url(r'^api/', include(router.urls)), 

マッチする最初のパターンは後者だったので問題ありませんでした。あなたはPatientDetailビューのURLパターンを追加しかし

、:

url(r'^(?P<slug>[\w\-]+)/$', PatientDetail.as_view(), name='patient_detail') 

/api/は試合でした。したがって、ビューが呼び出され、という患者さんが見つかりました。apiという患者が見つかりませんでした。なぜなら、URLが見つからなかったからです。

関連する問題