web-dev-qa-db-ja.com

Django urls uuidが機能しない

以下で、URLがとして設定されている場合、uuidのパターンはどのようになりますか?

urls.py

url(r'^getbyempid/(?P<emp_id>[0-9]+)/(?P<factory_id>[0-9]+)$',views.empdetails)

動作しません、

http://10.0.3.79:8000/app1/getbyempid/1/b9caf199-26c2-4027-b39f-5d0693421506

しかし、これはうまくいきます

http://10.0.3.79:8000/app1/getbyempid/1/2
15
Rajeev

数字0〜9に加えて、uuidには数字a〜fとハイフンを含めることもできるため、パターンを次のように変更する必要があります。

(?P<factory_id>[0-9a-f-]+)

より厳密な正規表現を使用することもできますが、通常はそれだけの価値はありません。あなたの見解では、次のようなことができます:

try:
    factory = get_object_or_404(Factory, id=factory_id)
except ValueError:
    raise Http404

無効なuuidまたはデータベースに存在しないuuidを処理します。

36
Alasdair

Django 2.0なので、[〜#〜] uuid [〜#〜]intに新しいDjango機能: Path Converters

コードをもう一度エレガントにします

from Django.urls import path
...

urlpatterns = [
    ...
    path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
37
vishes_shell

他の回答を完了するために、正規表現はa-fないa-z、 そう:

urlpatterns = [
    url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]

上記のようなものが最も正確な答えになる可能性があります。

5

あなたのURLパターンは数字だけを取ります、これを試してください:

url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
1
Geo Jacob

同じ問題があり、これで修正しました:

url(r'^offer_details/(?P<uuid>[0-9a-f\-]{32,})$', offer_details, name='offer_details')
`
0
lansanalsm