web-dev-qa-db-fra.com

Django - n'est pas un espace de noms enregistré

J'essaie de traiter un formulaire dans Django/Python en utilisant le code suivant.

home.html:

<form action="{% url 'home:submit' %}"method='post'>

views.py:

def submit(request):
    a = request.POST(['initial'])
    return render(request, 'home/home.html', {
        'error_message': "returned"
    })

urls.py:

url(r'^submit/$', views.submit, name='submit'),

quand j'essaye de l'exécuter dans un navigateur, j'obtiens l'erreur:

NoReverseMatch at/home/u'home 'n'est pas un espace de noms enregistré et j'obtiens également qu'il y a une erreur dans le formulaire?

16
Programmerr

Vous devriez juste changer votre URL d'action dans votre template:

<form action="{% url 'submit' %} "method='post'>

Sur la note des espaces de noms url ...

Pour pouvoir appeler des URL en utilisant home namespace, vous devez avoir dans votre ligne de fichier principale urls.py quelque chose comme:

url(r'^', include('home.urls', namespace='home')),
20
mislavcimpersak

Dans votre projet principal, ouvrez d'abord url.py. Ensuite, vérifiez que nom_app doit être déclaré en premier. Si ce n'est pas le cas, déclarez-le.

Par exemple, le nom de mon application correspond aux informations utilisateur déclarées dans url.py.

app_name = "userinfo"

urlpatterns = [
    url(r'home/', views.home, name='home'),
    url(r'register/', views.registration, name='register')
]
10
vikasvmads

Une erreur commune que je trouve toujours, c’est que vous avez un espace de noms dans votre modèle et que, dans YourApp.url, vous n’avez pas d’espace de noms. Si vous devez utiliser des espaces de noms, ajoutez à YourApp.url quelque chose comme ceci app_name = "blog "

puis sur vos temples, assurez-vous d’ajouter votre espace de noms afin que vous obteniez quelque chose comme ceci "les erreurs de supposition viennent de edit.html "alors sur ce modèle particulier vous le ferez
"{% url 'blog:vote' pk=post.pk %}""{% url 'blog:post_category' category.name %}"

0
user3719458

le nom de la balise doit être unique dans le urls.py fichier dans votre package d’application dans le projet! il est important que le marquage de gabarit mette en route quoi et où.

maintenant [1] à l'intérieur du urls.py fichier, vous devez déclarer la variable appName et lui donner la valeur unique. par exemple appName = "myApp"; dans votre cas myHomeApp et [2] définissent également la liste urlpatterns ...

urlpatterns = [..., url(r'^submit/$', views.submit, name='submit'), ...];

dans le fichier html, remplacez simplement la balise url par:

<form action="{% url 'myHomeApp:submit' %}" method='post'>

cela devrait sifuce ... sinon il suffit d'écrire ici et nous verrons comment continuer

0
Eyal Israel

J'ai également fait face au même problème. il est corrigé maintenant en ajoutant

app_name = "<name of your app>" in app/urls.py
0
muhammed fairoos nm