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