2013-11-10 3 views
1

Как установить поля формы html, не используя django-forms.django poplulate html form

+3

Ваш вопрос непонятен. Использование форм django хорошо объяснено в документации –

+0

. Я изменил вопрос. – rakesh

+2

«без использования django-forms» Почему вы хотите это сделать? – moenad

ответ

2

Если вы не хотите использовать django.forms, но получить данные из модели и отображать его в HTML-форму, вы могли бы сделать что-то вроде этого:

views.py

from django.shortcuts import render_to_response, redirect 
from myApp.models import MyModel 

def editForm(request, model_pk): 
    model = MyModel.objects.get(pk=model_pk) 
    return render_to_response('formUpdate.html',{ 'model' : model }) 

def updateForm(request, model_pk): 
    model = MyModel.objects.get(pk=model_pk) 
    model.firstname = request.POST['firstname'] 
    model.lastname = request.POST['lastname'] 
    model.save() 
    return redirect('home', message='your name has been updated') 

шаблон - formUpdate.html

{% extends "base.html" %} 

{% block content %} 
<form action="/updateForm/{{ model.id }}/" method="post"> 
First name: <input type="text" name="firstname" value="{{ model.firstname }}" /><br /> 
Last name: <input type="text" name="lastname" value="{{ model.lastname }}" /><br /> 
<input type="submit" value="submit" /> 
</form> 
{% end block %} 

models.py

from django.db import models 

class MyModel(models.Model): 
    firstname = models.CharField(max_length=20) 
    lastname = models.CharField(max_length=20) 

urls.py

from django.conf.urls.defaults import * 

urlpatterns = patterns('', 
    (r'^$', 'views.home', name="home"), 
    (r'^editForm/(?P<model_pk>\d+)/$', 'views.editForm'), 
    (r'^updateForm/(?P<model_pk>\d+)/$', 'views.updateForm'), 
) 

Это очень похоже на то, как формы обрабатываются в PHP или подобного, model передается в шаблон, где существующие значения являются оказаны. id или pk (первичный ключ) модели передаются в представление через URL-адрес, а затем обновляются, а затем возвращаются в вид хранения в данных POST, где они могут быть извлечены, и обновленные значения, хранящиеся в базе данных.

Одна из красот Django заключается в том, как она уравновешивает скорость разработки с возможностью подключения - в значительной степени любые ее части могут быть заменены или изменены.

Сказав это, есть причина, по которой вы не хотите использовать django.forms? Насколько я понимаю, form просто выполняет большую часть тяжелой работы в приведенном выше примере для вас, вот что такое django.forms. У них также есть другие функции, которые помогают предотвратить вредоносный доступ к вашему веб-приложению, например, OOTB. Достаточно легко создать вспомогательные методы ajax для их извлечения и обновления.

+0

», это именно то, что я хотел, спасибо. и очень удивительное объяснение. Я не хочу использовать django-forms, потому что я не хочу писать создание формы в html, поскольку дизайн был выполнен дизайнером ui. но, сказав, что формы django являются мощными, я обязательно рассмотрю ваше предложение. thanks agaub @Henry – rakesh

+1

Возможно создание элементов формы html вручную, что позволяет полностью манипулировать дизайнером и по-прежнему использовать 'django.forms' везде в приложении. Я думаю, что последовательное именование элементов формы и полей модели/формы сделало бы это очень просто: см. Https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template. –

0

Вы можете сделать это, как если бы вы создали обычную форму в html. Просто будьте осторожны, чтобы разместить {% csrf_token %}. И nameinput в форме, так как они будут использоваться в представлении.

Например:

<form method="post" action="#the url for the view"> 
{% csrf_token %} 
... 
... 
<!-- fields that you want Eg: --> 
<label for="username">User name:</label> 
<input type="text" name="username" id="username" /> 
... 
... 
<input type="submit" value="Submit" /> 
</form> 

Надеется, что это помогло.