Django - не зарегистрированное пространство имен

Я пытаюсь обработать форму в django/python, используя следующий код.

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'),

когда я пытаюсь запустить его в браузере, я получаю сообщение об ошибке:

NoReverseMatch at/home/u'home 'не является зарегистрированным пространством имен, а также я получаю, что в форме есть ошибка?

Ответы

Ответ 1

Вы должны просто изменить свой URL-адрес действия в своем шаблоне:

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

На заметке пространства имен URL...

Для того, чтобы иметь возможность вызвать ССЫЛКИ home пространства имен вы должны иметь в своем главном urls.py файл линия что - то вроде:

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

Ответ 2

В вашем основном проекте сначала откройте url.py. Затем проверьте, должно ли сначала быть объявлено app_name. Если это не так, объявите это.

Например, имя моего приложения - информация о пользователе, которая объявлена в url.py

app_name = "userinfo"

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

Ответ 3

имя тега должно быть уникальным в файле urls.py внутри вашего пакета приложений внутри проекта! важно, чтобы тег шаблона направлял то, что и где.

теперь [1] внутри файла urls.py вам нужно объявить переменную appName и присвоить ему уникальное значение. например appName = "myApp"; в вашем случае myHomeApp и [2] также определяют список URL-адресов...

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

в html файле просто измените тег url на:

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

это должно sifuce... иначе просто напишите здесь, и мы посмотрим, как продолжить

Ответ 4

Распространенная ошибка, которую я всегда нахожу, это когда у вас есть пространство имен в вашем шаблоне, а в YourApp.url у вас нет пространства имен, поэтому, если вам нужно использовать пространство имен, добавьте в YourApp.url что-то вроде этого app_name = "blog "

затем в своих храмах убедитесь, что вы добавили свое пространство имен, так что у вас будет что-то вроде этого "предположения об ошибках, исходящих из edit.html ", а затем на этом конкретном шаблоне вы сделаете это
"{% url 'blog:vote' pk=post.pk %}" "{% url 'blog:post_category' category.name %}"

Ответ 5

Я также столкнулся с той же проблемой. теперь это исправлено добавлением

app_name = "<name of your app>" in app/urls.py

Ответ 6

url(r'^jet/', include('jet.urls', 'jet')),  # Django JET URLS
url(r'^jet/dashboard/', include('jet.dashboard.urls', 'jet-dashboard')),  # Django JET dashboard URLS