【发布时间】:2016-08-22 13:49:27
【问题描述】:
在我的项目中,我有三个应用程序,“abc”、“xyz”和“common”。 Common 不是一个真正的应用程序,因为它只是存储由两个应用程序继承和扩展的模板、模型和视图。
项目级 urls.py 看起来像这样,并正确地将请求重定向到相应的应用程序:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^abc/', include('abc.urls')),
url(r'^xyz/', include('xyz.urls')),
]
两个应用程序的 url.py 文件看起来像这样;唯一的区别是用 XYZ 替换 ABC 的每个实例:
from django.conf.urls import url
from views import ABCAlertList as AlertList
from views import ABCEventList as EventList
from views import ABCEventDetail as EventDetail
from views import ABCEventReplay as EventReplay
from views import ABCUploadView as UploadView
urlpatterns = [
url(r'^$', AlertList.as_view(), name='view_alerts'),
url(r'^entities/(?P<uid>\w+)/$', EventList.as_view(), name='view_uid'),
url(r'^entities/(?P<uid>\w+)/replay/$', EventReplay.as_view(), name='view_replay'),
url(r'^entities/(?P<uid>\w+)/event/(?P<eid>\w+)/$', EventDetail.as_view(), name='view_event'),
url(r'^upload/$', UploadView.as_view(), name='upload_file'),
]
同样,两个应用程序之间的所有视图都是通用的,因此它们中的任何一个都没有特定于应用程序的内容。两个应用程序都使用同一个通用模板中的同一行:
<a href="{% url 'view_uid' alert.uid %}">
现在,问题来了:
App ABC 在顶级页面上运行良好。但是它呈现的 url 越过该点指向错误的应用程序。
例如,我会在
http://localhost:8888/abc/
并且该页面上的网址呈现为
http://localhost:8888/xyz/entities/262b3bce18e71c5459a41e1e6d52a946ab47e88f/
什么给了?看起来 Django 正在读取错误的应用程序的 urls.py。
【问题讨论】:
-
两个 urls 文件中的名称是否相同。尝试在 ABC 应用程序中将 view_uid 更改为 abc_view_uid。和 XYZ 应用程序中的 xyz_view_uid。
-
当您说 /abc/ 页面上的 URL 时,您是指指向应用程序其他部分的链接吗?因为如果是这样,这听起来可能只是一个简单的错字。假设您的 ABC 和 XYZ urls.py 是适当的类型,我不明白为什么 Django 会创建错误的 URL。