#django #django-views
#django #django-представления
Вопрос:
Я натыкаюсь на стену с этой ошибкой. Я уверен, что упускаю из виду что-то основное, просто не могу понять это…
ValueError at /sing/register
The view sing.singer.views.grade didn't return an HttpResponse object.
файл представления…
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponseRedirect
from django.template import Template, RequestContext
from dash.forms import GradeForm
def register(request):
if request.method == 'POST':
form = GradeForm(data=request.POST)
if form.is_valid():
new_dash_profile = form.save()
new_user = form.save()
return HttpResponseRedirect("/success/")
else:
form = RegisterForm()
return render_to_response('grade.html',{'form':form},context_instance=RequestContext(request) )
мой urls.py
urlpatterns = patterns('dashboard.dash.views',
(r'^sing/register','register' ),)
мой settings.py
TEMPLATE_DIRS = (
"/home/django/testing/sing/grade/templates",)
Ответ №1:
def register(request):
if request.method == 'POST':
form = GradeForm(data=request.POST)
if form.is_valid():
new_dash_profile = form.save()
new_user = form.save()
return HttpResponseRedirect("/success/")
else:
form = RegisterForm()
return render_to_response('grade.html',{'form':form},context_instance=RequestContext(request) )
ваши отступы выглядят не так?
Изначально вы вводите представление с request != ‘POST’, которое никогда не достигнет этого оператора else внизу, поэтому вы не получите HttpResponse.
Другая вещь, которая выглядит странно, это то, что даже если вы исправите свои отступы, вы сначала показываете регистрационную форму, а после запроса post вы помещаете данные из своей регистрационной формы в GradeForm, если это не подтвердит, что вы показываете, передайте свою форму оценки в свой шаблон. Это то, что вы имели в виду?
также в вашем urls.py Я бы добавил /
к:
(r'^sing/register','register' ),)
Нравится:
(r'^sing/register/','register' ),)
если вы не хотите, чтобы оно совпадало (например):
www.site.com/sing/registerasdf/
я мог бы даже предложить использовать ‘/ $’ в конце вот так:
(r'^sing/register/$','register' ),)
чтобы предотвратить совпадения с (например):
www.site.com/sing/register/asdf/asdf/asdf/
www.site.com/sing/register/asdf/asdf/
www.site.com/sing/register/asdf/
Комментарии:
1. вау. это действительно был отступ! тотальный блондинистый момент! Спасибо @DTing!
Ответ №2:
Судя по коду, единственный раз, когда он не возвращает HttpResponse, это когда это не POST-запрос. Может быть, вместо этого вы выполняете GET?
Ответ №3:
Я думаю, что это ваше HttpResonseRedirect
. Я не могу сказать, что я использовал это так часто (если вообще использовал). На вашем месте я бы попробовал ярлык redirect
http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#redirect
Комментарии:
1. docs.djangoproject.com/en/dev/ref/request-response/…
2. @DTing Это интересно, и я не уверен, что вы пытались сказать.
3. Извините, поскольку он просто передает URL, у него нет причин использовать ярлык перенаправления.
4. @DTing Вы, вероятно, правы!.. Я также не заметил указанного вами отступа, который мог бы что-то изменить. Мне просто нравятся ярлыки.