【发布时间】:2021-06-19 21:05:10
【问题描述】:
我知道这已经被问过多次了,但我还是不明白。
如何在一个 Django 应用中创建一个将用户发送到第二个应用的 href 链接?
这是我的设置:
myproject/
manage.py
myproject/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
app1/
migrations/
templates/
app1/
app1.html
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
app2/
migrations/
templates/
app2/
app2.html
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
我的项目/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('app1/', include('app1.urls'), name='app1'),
path('app2/', include('app2.urls'), name='app2'),
]
我的项目/settings.py
INSTALLED_APPS = [
'app1.apps.App1Config',
'app2.apps.App2Config',
'django.contrib.admin',
...
]
app1/urls.py(类似于app2)
from django.urls import path
from . import views
urlpatterns = [
path('', views.app1, name='app1'),
]
app1/views.py(类似于 app2)
from django.template import loader
from django.http import HttpResponse
def app1(request):
template = loader.get_template('app1/app1.html')
return HttpResponse(template.render())
app1/templates/app1/app1.html(类似于app2)
<p>This is the template of app1.</p>
<a href="app2/">Go to App2</a> # doesn't work
<a href="app2/app2.html">Go to App2</a> # doesn't work
<a href="./app2/app2.html">Go to App2</a> # doesn't work
我的问题是,这会将我发送到地址 127.0.0.1:8000/app1/app2/,这给了我一个 404 错误。不过,我可以通过127.0.0.1:8000/app2/ 毫无问题地访问app2。
编辑:
感谢大家的反馈。在考虑了您的建议后,我进行了以下更改:
我的项目/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('app1/', include('app1.urls', namespace='app1')), # ADDED NAMESPACE
path('app2/', include('app2.urls', namespace='app2')), # ADDED NAMESPACE
]
myproject/settings.py:没有变化
app1/urls.py:(类似于app2)
from django.urls import path
from . import views
app_name = 'app1' # THIS WAS MISSING
urlpatterns = [
path('', views.app1, name='app1'),
]
app1/views.py:没有变化
app1/templates/app1/app1.html:(类似于app2)
<p>This is the template of app1.</p>
<a href="{% url 'app2:app2' %}">Go to App2</a> # AS SUGGESTED BY seif
现在可以了。
【问题讨论】:
-
它们在不同的端口上运行吗?
-
我不认为问题出在不同的端口上。更多模板相关
标签: django