以下で、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
数字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を処理します。
Django 2.0なので、[〜#〜] uuid [〜#〜]とintに新しいDjango機能: Path Converters 。
コードをもう一度エレガントにします:
from Django.urls import path
...
urlpatterns = [
...
path('getbyempid/<int:emp_id>/<uuid:factory_id>', views.empdetails)
]
他の回答を完了するために、正規表現はa-f
ないa-z
、 そう:
urlpatterns = [
url(r'^request/(?P<form_id>[0-9A-Fa-f-]+)', views.request_proxy)
]
上記のようなものが最も正確な答えになる可能性があります。
あなたのURLパターンは数字だけを取ります、これを試してください:
url(r'^getbyempid/(?P<emp_id>[0-9a-z-]+)/(?P<factory_id>[0-9a-z-]+)$',views.empdetails)
同じ問題があり、これで修正しました:
url(r'^offer_details/(?P<uuid>[0-9a-f\-]{32,})$', offer_details, name='offer_details')
`