2015-02-16 3 views
-2

Извините, неудобно, но я очень новичок на Django. Я представил себе, что Django будет создавать формы для меня, если я буду использовать forms.py, мне не нужно будет создавать тег ввода в шаблоне, поэтому я создал тестовый шаблон, так как я создал form.py. Тем не менее, запустив мой код, мне сказали, что мой взгляд не возвращает объект HttpResponse, и я подозреваю, что это связано с тем, что мой шаблон имеет только текст. Не могли бы вы помочь мне создать шаблон для работы моих форм? Мы можем использовать приведенный выше пример. Я вставьте его ниже:Django Forms vs Templates

def create_post(request): 
    if request.method == 'POST': 
     form = CreatePostForm(request.POST) 
     if form.is_valid(): 
      my_model = form.save() 
      return redirect('/posts/') 
     else: 
      form = CreatePostForm() 
     c = {'form' : form} 
     return render(request,'create_post.html',c) 
+0

Вашего пример кода не отступ должным образом, есть это опечатка в 'templtate.html', и вы не разбираете шаблон. Прочитайте документы Django, прежде чем задавать вопросы. – rednaw

+0

Можете ли вы поместить утверждения печати до конца каждого выражения «if» «else»? Я думаю, что ваша проверка формы не работает –

ответ

2

Вы должны вернуть render() вместо HttpResponse:

from django.shortcuts import render 

def create_a_my_model(request): 
    ... 
    return render(request, 'template.html', c) 

template.html может быть очень примитивным:

<form method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button>Save</button> 
</form> 

Также обратите внимание, что хорошая практика для перенаправления на некоторую страницу после запроса на отправку. Это предотвратит двойную отправку. Таким образом, весь код вашего зрения будет:

from django.shortcuts import redirect, render 

def create_a_my_model(request): 
    if request.method == 'POST': 
     form = MyModelForm(request.POST) 
     if form.is_valid(): 
      my_model = form.save() 
      return redirect(my_model) # if the model has `get_absolute_url()` 
    else:   
     form = MyModelForm() 
    return render(request, 'template.html', {'form': form}) 

Если модель не имеет метод get_absolute_url() вы можете перенаправить на любую другую URL: return redirect('/success/page/')

+0

Я очень ценю вашу помощь, однако у меня все еще такая же ошибка. Это то, что у меня есть как ошибка: Исключительное значение: Вид blogapp.views.create_post не возвращал объект HttpResponse. Вместо этого вместо него он вернул Нет. –

+0

Я заменил HttpResponse на: return render (request, 'create_post.html', c) –

+0

Измените свой вопрос и скопируйте-вставьте код 'create_post()'. Там могут быть проблемы с отступом, поэтому мне нужно посмотреть на точный код, который вы запускаете. – catavaran