我创建了2个测试应用程序test1和test2,并在视图和url文件中添加了相同的功能。问题在于您访问哪个应用程序都没有关系,相同的链接(应用程序名称/链接)显示为href。
是否访问http://127.0.0.1:8000/test1或http://127.0.0.1/test2都无关紧要,链接将始终为“ Test Link”
使用语法url'appname:link'确实有效,并且向html模板发送额外的参数以使用应用程序名称确实可行,但是如何仅使用url'link'来解决呢
项目网址:
from django.conf.urls import include, url
from django.views import generic
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^test1/', include('test1.urls')),
url(r'^test2/', include('test2.urls')),
]
test1网址:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'testapp/', views.testapp, name='testapp'),
]
test2网址:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'testapp/', views.testapp, name='testapp'),
]
test1视图:
from django.shortcuts import render
def index(request):
return render(request, 'testme.html')
def testapp(request):
return render(request, 'testme.html')
test2视图:
from django.shortcuts import render
def index(request):
return render(request, 'testme.html')
def testapp(request):
return render(request, 'testme.html')
testme.html:
<a href = {% url 'testapp' %}>Test Link</a>
也许有一个可以设置为仅使用url'linkname'而不是url'appname:linkname'的设置吗?
答案 0 :(得分:1)
您有2个URL,名称为testapp。
将test2网址更改为(或提供应用名称)
urlpatterns = [
url(r'^$', views.index, name='index2'),
url(r'testapp/', views.testapp, name='testapp2'),
]
此外,在模板中添加引号
<a href ="{% url 'testapp' %}">Test Link</a>
答案 1 :(得分:0)
您为test1
和test2
使用相同的模板
首先创建2个模板test1
和test2
test1 views.py
def index(request):
return render(request,'test1.html')
test1 urls.py
url(r'^$',views.index, name='test1'),
test1模板test1.html
<a href = {% url 'test1' %}>Test 1 Link</a>
test2 views.py
def index(request):
return render(request, 'test2.html')
test2 urls.py
url(r'^$',views.index, name='test2'),
test2模板test2.html
<a href = {% url 'test2' %}>Test 2 Link</a>
项目urls.py
path('test1/',include('test1.urls')),
path('test2/', include('test1.urls'))
答案 2 :(得分:0)
通过使用中间件使其工作,目标是使用多个应用程序和1个模板。
class getname(object): def init (自己,get_response): self.get_response = get_response
def __call__(self, request):
return self.get_response(request)
def process_view(self, request, view_func, view_args, view_kwargs):
request.view_full_name = ".".join((view_func.__module__, view_func.__name__))
view_app_name_temp = request.view_full_name.split('.')
request.view_app_name = view_app_name_temp[0]
在模板上,将href链接更改为以下内容: href ='/ {{request.view_app_name}} /注册'