Ich habe 2 Test-Apps erstellt, test1 und test2, und dieselben Funktionen in den Ansichten und dieselben Einträge in den URL-Dateien hinzugefügt. Das Problem ist, dass es keine Rolle spielt, auf welche App Sie zugreifen. Derselbe Link, App-Name / Link, wird als href angezeigt.

Es spielt keine Rolle, ob ich auf http://127.0.0.1:8000/test1 oder http://127.0.0.1/test2, der Link lautet immer "" Test Link "

Die Verwendung der Syntax-URL 'appname: link' funktioniert, und das Senden eines zusätzlichen Parameters an die HTML-Vorlage zur Verwendung des App-Namens funktioniert. Wie kann jedoch nur die Verwendung der URL 'link' behoben werden?

Projekt-URLs:

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 url:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'testapp/', views.testapp, name='testapp'),

]

Test2 url:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'testapp/', views.testapp, name='testapp'),


]

Test1 Ansichten:

from django.shortcuts import render

def index(request):
    return render(request, 'testme.html')

def testapp(request):
    return render(request, 'testme.html') 

Test2 Ansichten:

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> 

Gibt es möglicherweise eine Einstellung, die so eingestellt werden kann, dass nur die URL 'Linkname' anstelle der URL 'Appname: Linkname' verwendet wird?

0
Michael_ZA 3 Juli 2019 im 12:28

3 Antworten

Beste Antwort

Das Ziel war es, mehrere Apps und eine Vorlage zu verwenden.

Klasse getname (Objekt): def init (self, 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]

Ändern Sie in der Vorlage den href-Link wie folgt: href = '/ {{request.view_app_name}} / register'

0
Michael_ZA 4 Juli 2019 im 06:35

Sie haben 2 URLs mit dem Namen testapp.

Ändern Sie die URLs von test2 in (oder geben Sie einen App-Namen an).

urlpatterns = [
    url(r'^$', views.index, name='index2'),
    url(r'testapp/', views.testapp, name='testapp2'),
]

Fügen Sie Ihrer Vorlage auch Anführungszeichen hinzu

<a href ="{% url 'testapp' %}">Test Link</a> 
1
HenryM 3 Juli 2019 im 09:33

Sie verwenden dieselbe Vorlage für test1 und test2

Erstellen Sie zuerst 2 Vorlagen test1 und test2

Test1 views.py

def index(request):
    return render(request,'test1.html')

Test1 urls.py

url(r'^$',views.index, name='test1'),

Test1 template 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-Vorlage test2.html

<a href = {% url 'test2' %}>Test 2 Link</a>

Projekt urls.py

path('test1/',include('test1.urls')),
path('test2/', include('test1.urls'))
0
sachin mathew 3 Juli 2019 im 10:38