Возможно, я могу переусердствовать в этом, а может и нет. У меня есть форма регистрации, которую я хочу использовать на индексной странице и как отдельная форма. По какой-то причине отдельная форма работает просто отлично, но форма на индексной странице дает мне ошибку 403, когда она отправлена. Я буду использовать jQuery позже, но мне нужно, чтобы все работало без JavaScript.Django: Используйте тот же вид для обработки той же формы на двух отдельных страницах.
Оказывает ПОДПИСАТЬСЯ форму, похожие на Facebook страницу
# views.py snippet
class IndexPageTemplateView(TemplateView): # index page(http://localhost)
template_name = 'fld/index.html'
def get(self, request, *args, **kwargs):
# prevent logged in users from accessing welcome page
if self.request.user.is_authenticated():
return HttpResponse(reverse("member_homepage", args=some_args))
else:
return render_to_response(self.template_name)
# Account view
class AccountCreateView(CreateView): # standalone(http://localhost/signup)
model = Account
form_class = CreateAccountForm
template_name = 'fld2/account_form'
success_url = 'thanks'
def get(self, request, *args, **kwargs):
# prevent logged in users from seeing this form
if self.request.user.is_authenticated():
# get the username of logged in user
...
# redirect to homepage
return HttpResponseRedirect(reverse('some_args', args=(args,)))
else:
# display form to non members
return render(request, self.template_name, {'form': self.get_form_class()})
def form_valid(self, form):
clean = form.cleaned_data
form.instance = form.save()
if form.instance:
try:
# send email
except Account.DoesNotExist:
...
return super(AccountCreateView, self).form_valid(form)
Я буквально используя те же самые точные формы с атрибутами разных действий. Я попытался заменить значения атрибутов, используя те же значения атрибутов и не используя значения атрибутов. Кажется, я не могу получить доступ к моему представлению со страницы индекса, даже когда я его жестко кодирую, я получаю ошибку 403. В основном посетитель должен иметь возможность зарегистрироваться на главной странице (например, Facebook) или на странице регистрации (например, Twitter). Я думаю, что мне, возможно, придется использовать сигналы, чтобы сделать эту работу.
<!--index.html snippet-->
<form action="{% url "create_account" %}" method="post">{% csrf_token %}
<input name="username" type="text" required>
<input name="password" type="password" required>
<input name="email" type="email" required>
<input name="signup1" type="submit" value="Create account">
</form>
<!--account_form.html-->
<form action="." method="post">{% csrf_token %}
<input name="username" type="text" required>
<input name="password" type="password" required>
<input name="email" type="email" required>
<input name="signup2" value="Create account" type="submit">
</form>
Основные urls.py фрагмент
url(
regex=r'^$',
view=WelcomePageTemplateView.as_view(),
name='index'
),
url(
regex=r'^signup$',
view=include('account.urls'),
# name='signup'
),
url(
regex=r'^(?P<slug>[\w]+)/settings/?',
view=include('account.urls'),
)
счет urls.py
url(
regex=r'^$',
view=AccountCreateView.as_view(),
name="create_account"
),
Не связано, но зачем вы визуализируете форму вручную? Не можете ли вы просто использовать что-то вроде '{{form.as_table}}' '{{form.as_table}}'? –
Я хочу больше контролировать представление форм. as_p на самом деле не дает мне этого. Кроме того, я лично никогда не использую таблицы для не табличных данных. – Staccato