Seite 1 von 1

NoReverseMatch - aber irgendwie auch nicht

Verfasst: Montag 30. November 2020, 21:35
von k.marco.1970
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

Re: NoReverseMatch - aber irgendwie auch nicht

Verfasst: Dienstag 1. Dezember 2020, 07:26
von Bolitho
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...

Re: NoReverseMatch - aber irgendwie auch nicht

Verfasst: Dienstag 1. Dezember 2020, 22:22
von k.marco.1970
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

Re: NoReverseMatch - aber irgendwie auch nicht

Verfasst: Dienstag 1. Dezember 2020, 23:13
von Bolitho
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.