我正在制作一个可重复使用的Django应用程序,假设它的名字是Polls。无论在其父应用程序的urls.py中在哪里配置,该应用程序都应该正常工作。
考虑下面的结构,就像Django教程中的结构一样
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
polls/
__init__.py
urls.py
admin.py
apps.py
models.py
views.py
因此,polls应用程序有自己的urls.py和自己的views.py,它们可以链接到任何其他应用程序,例如通过向mysite/mysite/urls.py添加一行来链接mysite,例如本例中的第5行urls.py:
from django.urls import path, include
urlpatterns = [
path('polls/', include('polls.urls'))
]
在本例中,民意调查应用程序的所有视图都将有一个类似的链接https://somedomain.com/polls/the-relative-page-link然而,即使我们将上述代码中的第5行编辑为其他基本路径,如:,民意调查应用程序仍应正常工作
urlpatterns = [
path('another-path/', include('polls.urls'))
]
因此,这将更改为https://somedomain.com/another-path/the-relative-page-link
我的问题是;民意测验";应用程序包含自定义javascript代码,这些代码与表示服务器端API的另一个视图通信。因此,为了使这种通信能够正常工作,无论polls URL是在/polls下还是在/另一个路径下,我需要一种方法来动态查找polls应用程序的当前路径,以便它能够生成可以与其API通信的正确javascript代码。我该如何做到这一点,或者在制作可重复使用的应用程序时,处理这种情况的传统方法是什么?
在polls/urls.py
中
from .view import Http404View
urlpatterns = [
...,
re_path('^$', Http404View, name='mysite_baseurl'),
]
在polls/views.py
中
def Http404View(request):
raise Http404()
现在,您只需执行reverse('mysite_baseurl')
即可获得所需的基本目录。
如果有人试图直接去那里,他们会得到404页的