Форум сайта python.su
ВСем привет, помогите разобраться. Когда набираю , mysite/registr/ форма открывается и всё работает, но когда захожу на главную страницу и там ссылка на регистрацию выдается ошибка:
Reverse for ‘views.register1’ with arguments ‘()’ and keyword arguments ‘{}’ not found. 0 pattern(s) tried:
вот все тексты:
def shapka(request): return render_to_response("Shapka.html") def login(request): return render_to_response("login.html") def register(request): return render_to_response("register.html") from django.views.generic.edit import FormView from django.contrib.auth.forms import UserCreationForm class RegisterFormView(FormView): form_class = UserCreationForm # Ссылка, на которую будет перенаправляться пользователь в случае успешной регистрации. # В данном случае указана ссылка на страницу входа для зарегистрированных пользователей. success_url = "/login/" # Шаблон, который будет использоваться при отображении представления. template_name = "register.html" def form_valid(self, form): # Создаём пользователя, если данные в форму были введены корректно. form.save() # Вызываем метод базового класса return super(RegisterFormView, self).form_valid(form)
urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^$', views.index), url(r'^shapka/$', views.shapka), url(r'^login/$', views.login), url(r'^register/$', views.register), url(r'^register1/$', views.RegisterFormView.as_view()) ]
<p class="word"><a href = {% url 'views.register1' %}>Регистрация</a></p>
Офлайн
Вы неправильно понимаете реверс. Суть в том, что в шаблонах и в коде вы никогда не должны ссылаться на УРЛ, вы должны получать УРЛ через его имя. Смысл в том, чтобы не менять по проекту урлы, если изменится ТЗ. Вы меняете УРЛ только в urls.py и все.
Вот определение тега
{% url ‘some-url-name’ v1 v2 %}
urlpatterns = [ url(r'^register1/$', views.RegisterFormView.as_view(), name="url_register_1") ]
<p class="word"><a href = "{% url 'url_register_1' %}">Регистрация</a></p>
Отредактировано FishHook (Июнь 2, 2017 12:07:24)
Офлайн
FishHookСпасибо огроммное, помогло. Но теперь вылез другой прикол: использую
Вы неправильно понимаете реверс. Суть в том, что в шаблонах и в коде вы никогда не должны ссылаться на УРЛ, вы должны получать УРЛ через его имя. Смысл в том, чтобы не менять по проекту урлы, если изменится ТЗ. Вы меняете УРЛ только в urls.py и все.Вот определение тега
class RegisterFormView(FormView): form_class = UserCreationForm
Офлайн
Где пишет, кто пишет? Вы же уже не новичок, где трейсбэк ошибки? Где код формы?
Офлайн
FishHookкод формы:
Где пишет, кто пишет? Вы же уже не новичок, где трейсбэк ошибки? Где код формы?
<html lang="ru"> <html> <head> <title>Регистрация</title> </head> <body> <form action="" method="post"> {% csrf_token %} <!-- as_p для того, чтобы каждый элемент формы был с новой строки --> {{ form.as_p }} <button type="submit">Зарегистрироваться</button> </form> </body> </html>
Офлайн
ciklone
код формы:
Офлайн
FishHookотож, в литературе пишут, что это поле опциональное. Может джанго 1.9 что то поменялось?
Офлайн
FishHookподдержка на боевом сервере ответила так: This is not pythonanywhere specific error. This is related to UserModel of Django. Please ask this on stackoverflow with more details and with code.
Офлайн
cikloneпокажите код формы и код модели!!!
отож
Офлайн
FishHookКод формы уже показывал, а в файле models.py ничего не писал, потому что всё работает из коробки.
from django.contrib import auth from django.contrib.auth.forms import UserCreationForm class RegisterFormView(FormView): form_class = UserCreationForm success_url = "/login/" template_name = "register.html" def form_valid(self, form): # Создаём пользователя, если данные в форму были введены корректно. ##form.last_name = "" form.save() return super(RegisterFormView, self).form_valid(form)
Офлайн