NoReverseMatch - aber irgendwie auch nicht

Django, Flask, Bottle, WSGI, CGI…
Antworten
k.marco.1970
User
Beiträge: 48
Registriert: Mittwoch 25. Dezember 2013, 20:46

Hallo Python-Gemeinde,

nachdem ich dazu übergegangen bin mein Projekt neu aufzusetzen laufe ich mit einer Seite in einen NoReverseMatch error.

Das Projekt lief ursprünglich auf
Django==1.8.18, django-cms 3.4.5
und wird gerade auf
Django ==3.1.3 mit django-cms ==3.8.0 gehoben
gehoben.

Folgendes Gerüst des html-templates führt zu einem NoReverseMatch error:

Code: Alles auswählen

{% extends 'base.html' %}
<!DOCTYPE html>
{% block content %}
<html>
	<head>
		<meta charset="UTF-8">
		<title>Meine Seite</title>	
	</head>
	<body>
		{% if user.is_authenticated %}
				<div id="links">
					<form action="{% url "MEINEAPP" %}" method="post" enctype="multipart/form-data">
						{% csrf_token %}
						<p>{{ form.non_field_errors }}</p>
						<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
						<p>
						    {{ form.docfile.errors }}
						    {{ form.docfile }}
						</p>
						<br>
						{% if request.LANGUAGE_CODE == "de" %}
						    <b>Wähle aus</b>
						    <br>
						    <br>
							<div class="row">
									<input type="radio" name="modus" value="driving"> Wähle
							</div>  
							<br>
							<br><b>tu was</b>
							<br>
							  <button type="submit" >Und hopp</button>
							
						{% else %}
						    <b>Choose</b>
						    <br>
						    <br>
								  
									<input type="radio" name="modus" value="driving"> I am driving with a car
							<br>
							<br><b>start </b>
							<br>
							  <button type="submit" >Go!</button>
							{% endif %}	
				    </form>
				
				</div>
			<ul>
				{% for result in results %}
					<li>{{ result.trip_string}}</li>
				{% endfor %}
			</ul>
		{% else %}
		halloelse bitte registrieren
		{% endif %}
	</body>
</html>
{% endblock %}
Wenn ich das gleiche Template aber nur wie folgt nutze (ohne an urls.py oder meineapp/urls.py oder meineapp/views.py etwas zu ändern wird sie mit einem freundlichen "hallo" korrekt ausgegeben:

Code: Alles auswählen

{% extends 'base.html' %}
<!DOCTYPE html>
{% block content %}
<html>
	<head>
		<meta charset="UTF-8">
		<title>Meine Seite</title>	
	</head>
	<body>
hallo
	</body>
</html>
{% endblock %}
Kann mir hier jemand helfen? Mal wieder ; )

Viele Grüße
Marco
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Hallo Marco,

der Fehler liegt hier:

Code: Alles auswählen

{% url "MEINEAPP" %}
Django kann die URL nicht auflösen. Warum? Dazu müsste man jetzt die urls.py kennen...
k.marco.1970
User
Beiträge: 48
Registriert: Mittwoch 25. Dezember 2013, 20:46

Hallo Bolitho,

hier meine APP.urls

Code: Alles auswählen

# -*- coding: utf-8 -*-
from django.urls import path
from django.conf.urls import url
from MEINPROJEKT.APP.views import MEINEAPP
urlpatterns = [
    url(r'^$', MEINEAPP, name='MEINEAPP'), 
]
und meine urls

Code: Alles auswählen

from cms.sitemaps import CMSSitemap
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from django.urls import include, path

admin.autodiscover()

urlpatterns = [
    path('de/accounts/', include('allauth.urls')),
    path("sitemap.xml", sitemap, {"sitemaps": {"cmspages": CMSSitemap}}),
]


urlpatterns += i18n_patterns(path("admin/", admin.site.urls), path("", include("cms.urls")))

# This is only needed when using runserver.
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Die beiden template-Datei für die APP liegt unter MEINPROJEKT.APP.templates.APP.MEINTEMPLATE.html

Habe gesehen MEINEAPP, müsste eigentlich MEINEVIEW sein, aber ok.

VG
Marco
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Wenn ich das richtig sehe, fehlt die Einbindung der app.urls.py in der Haupt-urls.py

Code: Alles auswählen

from django.urls import include, path


urlpatterns = [
    # ... snip ...
    path('<pfad>/', include('app.urls')),
    # ... snip ...
]
siehe:
https://docs.djangoproject.com/en/3.1/t ... r-urlconfs

Ich würde dir empfehlen nach (guten) Beispielen für die Benennung von Views, Templates und Co. schauen. Das mit den Großbuchstaben mag funktionieren und wenn man nur allein mit dem Code arbeitet verständlich sein. In Python signalisieren Großbuchstaben aber globale Elemente und das kann zu Verwirrungen führen.
Antworten