Hi Tom,
Thanks for pointing me to docs.
I am able to display the error message now.
But because the page is being refreshed, the drop down is not visisble at
first. When i click the register button again, then i can see the error
message. Is there anyway i can show the registration drop down if errors
exists.
My code now looks like below.
Views.py :-
def register_view(request):
if request.method == 'POST':
form = UserCreationForm(data=request.POST, files=request.FILES)
if form.is_valid():
new_user = form.save()
new_user = authenticate(username=request.POST['username'],
password=request.POST['password1'])
login(request, new_user)
return HttpResponseRedirect(request.GET.get("next"))
else:
item_list =
CoolStuff.objects.filter(show_on_website=True).order_by('-item_rank')
column_1_items_list = item_list.filter(column=ONE)
column_2_items_list = item_list.filter(column=TWO)
column_3_items_list = item_list.filter(column=THREE)
return render_to_response('homepage.html',
{'column_1_items_list': column_1_items_list,
'column_2_items_list': column_2_items_list,
'column_3_items_list': column_3_items_list,
'register_form': form},
context_instance=RequestContext(request))
else:
return HttpResponseRedirect(reverse('coolstuff.views.homepage'))
base.html has the following for registration form :-
<ul class="nav nav-pills">
<li class="dropdown">
<a class="btn btn-success dropdown-toggle" href="#"
data-toggle="dropdown">Register</a>
<div class="dropdown-menu" style="padding:15px;
left:-150px; padding-bottom:0px;">
<form action="/user/register/?next={{request.path}}"
method="post" class="form-horizontal" name="register_form">{% csrf_token %}
<div class="register_field_errors" style="color:
red;">
{{ register_form.non_field_errors }}
</div>
{% for field in register_form %}
<div class="control-group">
<div class="register_field_errors">
{{ field.errors }}
</div>
{{ field.label_tag }}
{{ field }}
</div>
{% endfor %}
<input class="btn btn-primary" style="clear: left;
width: 100%; height: 32px; font-size: 13px;" type="submit" name="commit"
value="Register" />
</form>
</div>
</li>
<script>
$(function() {
// Setup drop down menu
$('.dropdown-toggle').dropdown();
// Fix input element click problem
$('.dropdown input, .dropdown
label').click(function(e) {
e.stopPropagation();
});
});
</script>
</ul>
How can i make the drop down form for registration to be displayed
automatically with errors rather than user clicking the button again. I
think i will need to write javascript, but i am not sure how i can achieve
it. Please suggest.
Thanks
Sreekanth
On Monday, 11 March 2013 14:36:56 UTC, Tom Evans wrote:
>
> On Mon, Mar 11, 2013 at 1:28 PM, sri <[email protected] <javascript:>>
> wrote:
> > Hi,
> >
> > I am relatively new to Django and trying to create a Django application
> > using 1.5 and created a pop up modal login and registration form using
> > twitter bootstrap. The example i used to create the drop down
> > login/registration form
> > ishttp://mifsud.me/adding-dropdown-login-form-bootstraps-navbar/[1]<http://mifsud.me/adding-dropdown-login-form-bootstraps-navbar/%5B1%5D>.Now,
> >
> > the problem i am having is that, how do i show any error messages
> (password
> > invalid etc) on the pop up login/registration drop down modal box.
> >
> > Here is my base.html file:
> >
> > <ul class="nav nav-pills">
> > <li class="dropdown">
> > <a class="btn btn-success dropdown-toggle" href="#"
> > data-toggle="dropdown"><i class="icon-user"></i>Login</a>
> > <div class="dropdown-menu" style="padding:15px; left:-100px;
> > padding-bottom:0px">
> > <form action="/user/login/?next={{request.path}}"
> > method="post" class="form-horizontal">{% csrf_token %}
> > <input id="id_email" required placeholder="Email"
> > style="margin-bottom: 15px;" type="text" name="email" size="30" />
> > <input id="id_password" required
> placeholder="Password"
> > style="margin-bottom: 15px;" type="password" name="password" size="30"
> />
> > <input class="btn btn-primary" style="clear: left;
> > width: 100%; height: 32px; font-size: 13px;" type="submit" name="commit"
> > value="Sign In" />
> > </form>
> > </div>
> > </li>
> > <li class="dropdown">
> > <a class="btn btn-success dropdown-toggle" href="#"
> > data-toggle="dropdown">Register</a>
> > <div class="dropdown-menu" style="padding:15px; left:-150px;
> > padding-bottom:0px">
> > <form action="/user/register/?next={{request.path}}"
> > method="post" class="form-horizontal" name="register_form">{% csrf_token
> %}
> > {{ register_form.non_field_errors }}
> > <input id="id_email" required placeholder="Email"
> > style="margin-bottom: 15px;" type="text" name="email" size="30" />
> > <input id="id_password" required
> placeholder="Password"
> > style="margin-bottom: 15px;" type="password" name="password1" size="30"
> />
> > <input id="id_password_confirm" required
> > placeholder="Password Again" style="margin-bottom: 15px;"
> type="password"
> > name="password2" size="30" />
> > <input class="btn btn-primary" style="clear: left;
> > width: 100%; height: 32px; font-size: 13px;" type="submit" name="commit"
> > value="Register" />
> > </form>
> > </div>
> > </li>
> >
> > And my views.py looks like below for login and registration views:
> >
> > def login_view(request):
> > if request.method == 'POST':
> > username = request.POST['email']
> > password = request.POST['password']
> > user = authenticate(username=username, password=password)
> > if user is not None and user.is_active:
> > login(request, user)
> > return HttpResponseRedirect(request.GET.get("next"))
> > else:
> > return HttpResponseRedirect(reverse('homepage'))
> >
> > def register_view(request):
> > if request.method == 'POST':
> > form = UserCreationForm(data=request.POST, files=request.FILES)
> > if form.is_valid():
> > new_user = form.save()
> > new_user = authenticate(username=request.POST['username'],
> > password=request.POST['password1'])
> > login(request, new_user)
> > return HttpResponseRedirect(request.GET.get("next"))
> > else:
> > return HttpResponseRedirect(reverse('homepage'))
> >
> > def homepage(request):
> > form = UserCreationForm()
> > return render_to_response('base.html',
> > {
> > 'register_form': form},
> > context_instance=RequestContext(request))
> >
> > And my forms.py looks like below for registration:
> >
> > class UserCreationForm(forms.ModelForm):
> >
> > password1 = forms.CharField(label='Password',
> widget=forms.PasswordInput)
> > password2 = forms.CharField(label='Password confirmation',
> > widget=forms.PasswordInput)
> >
> > class Meta:
> > model = MyUser
> > fields = ('email',)
> >
> > def clean_password2(self):
> > # Check that the two password entries match
> > password1 = self.cleaned_data.get("password1")
> > password2 = self.cleaned_data.get("password2")
> > if password1 and password2 and password1 != password2:
> > raise forms.ValidationError("Passwords don't match")
> > return password2
> >
> > def save(self, commit=True):
> > # Save the provided password in hashed format
> > user = super(UserCreationForm, self).save(commit)
> > user.set_password(self.cleaned_data["password1"])
> > if commit:
> > user.save()
> > return user
> >
> > Can anyone help me how i can pass the registration validation error
> messages
> > into the drop down modal form and also the login password validation
> error
> > messages. What i would like to do is displat the error message in the
> drop
> > down login/registration box itself.
> >
> > Thanks
> >
>
> Hi Sri
>
> Django's form objects have individual field objects, accessible in the
> template. These field objects have attributes for any validation error
> messages, and the form itself has an attribute for any non field
> related validation error messages.
>
> Normally, Django would output these for you when you output the form.
> However, you've hard-coded the HTML for the form, which makes it
> impossible for Django to output the related error messages.
>
> This page shows how forms are normally output:
>
>
> https://docs.djangoproject.com/en/1.5/topics/forms/#displaying-a-form-using-a-template
>
>
> And this section of the same page outlines what you must do if you
> choose not to allow Django to do most of it for you:
>
>
> https://docs.djangoproject.com/en/1.5/topics/forms/#customizing-the-form-template
>
>
> Cheers
>
> Tom
>
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.