¸üÐÂʱ¼ä:2019Äê10ÔÂ15ÈÕ17ʱ07·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
ÔÚ·´Ïò½âÎöºÍÃüÃû¿Õ¼ä֮ǰÎÒÃÇÏÈÀ´ËµËµURLSÓ²±àÂ룬ÓÃdjango¿ª·¢Ó¦?µÄʱºò£¬¿ÉÒÔÍêÈ«ÊÇÔÚurls.pyÖÐÓ²±àÂëÅäÖõØÖ·,ÔÚviews.pyÖÐHttpResponseRedirect()Ò²ÊÇÓ²±àÂëתÏòµØÖ·£¬µ±È»ÔÚtemplateÖÐÒ²ÊÇÒ»ÑùÁË£¬ÕâÑù´øÀ´Ò»¸öÎÊÌ⣬Èç¹ûÔÚurls.pyÖÐÐÞ¸ÄÁËij¸öÒ³ÃæµÄµØÖ·(Ò²¾ÍÊÇ˵¸ü¸Ä·ÓÉϵͳÖжÔÓ¦µÄ·ÓÉ·Ö·¢)£¬ÄÇôËùÓеĵط½(views.pyºÍtemplateÖÐ)¶¼ÒªÐ޸ġ£ÎÊÌâ³öÔÚÓ²±àÂ룬½ôñîºÏʹµÃÔÚ´óÁ¿µÄÄ£°åÖÐÐÞ¸ÄURLS³ÉΪ¸»ÓÐÌôÕ½ÐÔµÄÏîÄ¿¡£À´¿´ÏÂÃæµÄÄ£°åÎļþindex.htmlÖУ¬ÎÒÃǵ½µÄÁ´½ÓÓ²±àÂë³ÉÕâÑù£º
<li><a href="/goods/index/">urlÓ²±àÂë</a></li>
Èç¹ûʹÓÃÈí±àÂëÖ®ºó£¬ÎÞÂÛÔõô¸ü¸Ä·ÓÉϵͳÖеÄ·ÓÉ·Ö·¢£¬Ö»ÓжÔÓ¦µÄnamespaceÓënameÊôÐÔÖµ²»±ä£¬¾Í²»±ØÐÞ¸ÄÔÚviews.pyºÍtemplateÖеÄurl£¬Ò²¾ÍÊÇ˵

ÔÚʹÓÃDjangoÏîĿʱ£¬Ò»¸ö³£¼ûµÄÐèÇóÊÇ»ñµÃURLµÄ×îÖÕÐÎʽ£¬ÒÔÓÃÓÚǶÈëµ½Éú³ÉµÄÄÚÈÝÖÐ(ÊÓͼÖкÍÏÔʾ¸øÓû§µÄURLµÈ)»òÕßÓÃÓÚ´¦Àí·þÎñÆ÷¶ËµÄµ¼º½(ÖØ¶¨ÏòµÈ)¡£ ÈËÃÇÇ¿ÁÒÏ£Íû²»ÒªÓ²±àÂëÕâЩURL(·ÑÁ¦¡¢²»¿ÉÀ©Õ¹ÇÒÈÝÒײúÉú´íÎó)»òÕßÉè¼ÆÒ»ÖÖÓëURLconfºÁ²»Ïà¹ØµÄרÃŵÄURLÉú³É»úÖÆ£¬ÒòΪÕâÑùÈÝÒ×µ¼ÖÂÒ»¶¨³Ì¶ÈÉϲúÉú¹ýÆÚµÄURL¡£¡¾ÍƼöÁ˽⣺python+È˹¤ÖÇÄܿγ̡¿
»ñȡһ¸öURL×ʼÏëµ½µÄÐÅÏ¢ÊÇ´¦ÀíËüÊÓͼµÄ±êʶ(ÀýÈçÃû×Ö)£¬²éÕÒÕýÈ·µÄURLµÄÆäËü±ØÒªµÄÐÅÏ¢ÓÐÊÓͼ²ÎÊýµÄÀàÐÍ(λÖòÎÊý¡¢¹Ø¼ü×Ö²ÎÊý)ºÍÖµ¡£DjangoÌṩһ¸ö°ì·¨ÊÇÈÃURLÓ³ÉäÊÇURLÉè¼ÆÎ¨Ò»µÄµØ·½¡£ÄãÌî³äÄãµÄURLconf£¬È»ºó¿ÉÒÔË«ÏòʹÓÃËü£º
£¨1£©¸ù¾ÝÓû§/ä¯ÀÀÆ÷?·¢ÆðµÄURL ÇëÇó£¬Ëüµ÷?ÓÃÕýÈ·µÄDjango ÊÓͼ£¬²¢´ÓURL ÖÐÌáÈ¡ËüµÄ²ÎÊýÐèÒªµÄÖµ¡£
£¨2£©¸ù¾ÝDjangoÊÓͼµÄ±êʶºÍ½«Òª´«µÝ¸øËüµÄ²ÎÊýµÄÖµ£¬»ñÈ¡ÓëÖ®¹ØÁªµÄURL¡£
µÚÒ»ÖÖ·½Ê½ÊÇÎÒÃdz£ËµµÄ¸ù¾ÝµØÖ·¶¨Î»URL¡£
µÚ¶þÖÖ·½Ê½½Ð×ö·´Ïò½âÎöURL¡¢·´ÏòURL Æ¥Åä¡¢·´ÏòURL²éѯ»òÕß¼òµ¥µÄURL·´²é¡£ÔÚÐèÒªURLµÄµØ·½¡£
¶ÔÓÚ²»Í¬²ã¼¶£¬DjangoÌṩ²»Í¬µÄ¹¤¾ßÓÃÓÚURL ·´²é£º
(1)ÔÚÄ£°åÖУºÊ¹?ÓÃurlÄ£°å±êÇ©¡£
(2)ÔÚPython´úÂëÖУºÊ¹?django.core.urlresolvers.reverse() º¯Êý¡£
(3)ÔÚ¸ü¸ß²ãµÄÓë´¦ÀíDjangoÄ£ÐÍʵÀýÏà¹ØµÄ´úÂëÖУºÊ¹ÓÃget_absolute_url()·½·¨¡£
1¡¢ÃüÃû¿Õ¼ä£º
URLÃüÃû¿Õ¼äÔÊÐíÄã·´²éµ½Î¨Ò»µÄÃüÃûURLģʽ£¬¼´Ê¹²»Í¬µÄÓ¦ÓÃʹÓÃÏàͬµÄURL Ãû³Æ¡£µÚÈý·½Ó¦ÓÃʼÖÕʹÓôøÃüÃû¿Õ¼äµÄURL ÊÇÒ»¸öºÜºÃµÄʵ¼ù¡£ÀàËÆµØ£¬Ëü»¹ÔÊÐíÄãÔÚÒ»¸öÓ¦ÓÃÓжà¸öʵÀý²¿ÊðµÄÇé¿öÏ·´²éURL¡£»»¾ä»°½²£¬ÒòΪһ¸öÓ¦ÓõĶà¸öʵÀý¹²ÏíÏàͬµÄÃüÃûURL£¬ÃüÃû¿Õ¼ä½«ÌṩһÖÖÇø·ÖÕâЩÃüÃûURL µÄ·½·¨¡£Ò»¸öURLÃüÃû¿Õ¼äÓÐÁ½¸ö²¿·Ö£¬ËüÃǶ¼ÊÇ×Ö·û´®£º
<1>Ó¦ÓÃÃüÃû¿Õ¼ä:
Ëü±íʾÕýÔÚ²¿ÊðµÄÓ¦ÓõÄÃû³Æ¡£Ò»¸öÓ¦ÓõÄÿ¸öʵÀýÀý¾ßÓÐÏàͬµÄÓ¦ÓÃÃüÃû¿Õ¼ä¡£ÀýÈ磬¿ÉÒÔÔ¤¼ûDjangoµÄ¹ÜÀíÕ¾µãµÄÓ¦?ÃüÃû¿Õ¼äÊÇ'admin '¡£
<2>ʵÀýÃüÃû¿Õ¼ä:
Ëü±íʾӦÓõÄÒ»¸öÌØ¶¨µÄʵÀý¡£ÊµÀýµÄÃüÃû¿Õ¼äÔÚÄãµÄÈ«²¿ÏîÄ¿ÖÐÓ¦¸ÃÊÇΨһµÄ¡£µ«ÊÇ£¬Ò»¸öʵÀýµÄÃüÃû¿Õ¼ä¿ÉÒÔºÍÓ¦ÓõÄÃüÃû¿Õ¼äÏàͬ¡£ËüÓÃÓÚ±íʾһ¸öÓ¦ÓõÄĬÈÏʵÀý¡£ÀýÈ磬Django¹ÜÀíÕ¾µãʵÀý¾ßÓÐÒ»¸öĬÈϵÄʵÀýÃüÃû¿Õ¼ä'admin'¡£URLµÄÃüÃû¿Õ¼äʹÓÃ':'²Ù×÷·ûÖ¸¶¨¡£ÀýÈ磬¹ÜÀíÕ¾µãÓ¦ÓõÄÖ÷ҳʹÓÃ'admin:index'¡£Ëü±íʾ'admin'µÄÒ»¸öÃüÃû¿Õ¼äºÍ'index'µÄÒ»¸öÃüÃûURL¡£
££ includeº¯ÊýµÄAPIinclude(arg, namespace=None, app_name=None)££ namespaceÉèÖÃʵÀýÀýÃüÃû¿Õ¼ä£¬app_nameÉèÖÃÓ¦?ÓÃÃüÃû¿Õ¼ä££ ²»²»ÄÜÖ»ÉèÖÃapp_name£¬·ñÔò»á±¨´í£¬ÒÔÏÂÊDZ¨´íµÄÔ´Âëif app_name and not namespace:raise ValueError('Must specify a namespace if specifying app_name.')
Ò»°ãÀ´Ëµ£¬Í¬Ò»Ó¦ÓÃϵIJ»Í¬ÊµÀýÓ¦¸Ã¾ßÓÐÏàͬµÄÓ¦ÓÃÃüÃû¿Õ¼ä£¬µ«ÊÇ£¬Õâ²¢²»Òâζ×Ų»Í¬Ó¦ÓÿÉÒÔʹÓÃÏàͬµÄʵÀýÃüÃû¿Õ¼ä£¬ÒòΪʵÀýÃüÃû¿Õ¼äÔÚÄãËùÓÐÏîÄ¿Öж¼ÊÇΨһµÄ¡£
ÎÊÌ⣺ ÁíÍâÔÚÌí¼ÓÃüÃû¿Õ¼ä namespaceʱ¿ÉÄÜ»á³öÏÖÒÔÏÂÕâ¸öÎÊÌ⣺
'Specifying a namespace in include() without providing an app_name 'django.core.exceptions.ImproperlyConfigured: Specifying a namespace ininclude() without providing an app_name is not supported. Set the app_nameattribute in the included module, or pass a 2-tuple containing the list of
patterns and app_name instead.
½â¾ö·½°¸Îª£º
ÔÚ¶ÔÓ¦µÄappÓ¦ÓõÄurls.pyÖÐÌí¼Óapp_name = '[Ó¦ÓÃÃû³Æ]'ÈçÏÂ
from django.conf.urls import urlfrom . import viewsapp_name = 'users'# usersΪµ±Ç°Ó¦?ÓõÄÃû³Æurlpatterns = [url('^$', views.index),url('^(\d+)/$', views.detail),]
Èý¡¢url·´Ïò½âÎöʵÀý
ÔÚÎÒÃǵÄdjangoÏîÄ¿ÖÐͨ³£App£¬Ä¿Â¼½á¹¹¾Í¿ÉÒÔÈçÏÂdaily_fresh_demo
daily_fresh_demo¡¡¡¡|----daily_fresh_demo¡¡¡¡¡¡¡¡|----__init__.py¡¡¡¡¡¡¡¡|----settings.py¡¡¡¡¡¡¡¡|----urls.py¡¡¡¡¡¡¡¡|----wsgi.py¡¡¡¡|----df_cart #¶ÔÉÌÆ·¹ºÎï?³µ¹ÜÀíÀí|---- migrations # Ç¨ÒÆ?Îļþ?Ŀ¼|---- admin.py|---- apps.py|---- models.py|---- test.py|---- urls.py|---- views.py|---- __init__.py¡¡¡¡|----df_goods¡¡¡¡#ÉÌÆ·ÒÔ¼°ºǫ́¹ÜÀíÀí...¡¡¡¡|----df_user #?Óû§¹ÜÀíÀí...¡¡¡¡|----df_order #¶©µ¥¹ÜÀíÀí...¡¡¡¡|----templates¡¡¡¡¡¡¡¡ |index.html
1¡¢Â·ÓÉ·Ö·¢£º
daily_fresh_demo/daily_fresh_demo/urls.pyfrom django.contrib import adminfrom django.urls import path
from django.conf.urls import url, includeurlpatterns = [path('admin/', admin.site.urls),url(r'^goods/', include('df_goods.urls', namespace='df_goods')), # Ìí¼ÓʵÀýÀýÃüÃû¿Õ¼äurl(r'^user/', include('df_user.urls', namespace='df_user')),url(r'^cart/', include('df_cart.urls', namespace='df_cart')),url(r'^order/', include('df_order.urls', namespace='df_order')),]
¸ù¾Ý·ÓÉ·Ö·¢µ½¸÷¸öÏàÓ¦µÄappÖС£²¢Ìí¼ÓʵÀýÃüÃû¿Õ¼ä
2¡¢×Ó·ÓÉ
daily_fresh_demo/df_goods/urls.pyfrom django.conf.urls import urlfrom . import viewsapp_name = 'df_goods' # Ó¦?ÓÃÃüÃû¿Õ¼äurlpatterns = [url('^index/$', views.index, name="index"),]
df_goodsÖеÄ·ÓÉ£¬Ìí¼ÓÓ¦?ÃüÃû¿Õ¼ä¡£²¢ÔÚurlº¯ÊýÖÐÌí¼ÓnameÊôÐÔ¡£
3¡¢ÊÓͼº¯Êý
daily_fresh_demo/df_goods/views.pyfrom django.shortcuts import render, reversedef index(request):print(reverse("df_goods:index")) # ÀûÀû?ÓÃreverseº¯Êý·´Ïò½âÎöurl¡¡¡¡# ´òÓ¡½á¹ûΪ/goods/index/return render(request, 'index.html')
4¡¢¾²Ì¬Îļþindex.html
daily_fresh_demo/templates/index.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>index</title></head><body><a href="/goods/index">Ó²Á´½Ó</a><a href="{% url "df_goods:index" %}">ÈíÁ´½Ó</a></body></html>
5¡¢½á¹û
¾²Ì¬ÎļþÖÐindex.htmlµÄurl½âÎö½á¹ûÈçÏÂ
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>index</title></head><body><a href="/goods/index">Ó²Á´½Ó</a><a href="/goods/index/">ÈíÁ´½Ó</a> # Èí±àÂëͨ¹ý½âÎöºóµÃµ½µÄ½á¹ûÓëÓ²±àÂë?Ò»ÖÂ</body></html>
×ܽ᣺ÕâÑùÒ»À´Í¨¹ýÃüÃû¿Õ¼ä£¬ÎÞÂÛÔÚtemplatesÎļþÖÐÓжàÅÓ´óµÄurlµØÖ·Ó³É䣬ֻҪʹÓÃurlÈí±àÂ룬ÔÚ¸ü¸Ä·ÓÉϵͳµÄʱºò£¬¶¼ÄÜ×Ô¶¯Éú³É¡£¶øÈç¹ûʹÓÃÓ²Á´½ÓÓ²±àÂ룬¾ÍÖ»ÄÜÔÚviews.pyºÍ¾²Ì¬ÎļþÖÐÖð¸öÐÞ¸ÄurlµØÖ·£¬²»½öºÄ·Ñʱ¼ä£¬¸üÈÝÒײúÉú´íÎó¡£
±±¾©Ð£Çø