Предварительный просмотр формы Django с Google App Engine - PullRequest
0 голосов
/ 05 августа 2011

Я до сих пор не получил предварительный просмотр формы django с движком приложений Google.Я не видел работающего примера, и мои попытки использовать предварительный просмотр формы django с google app engine не увенчались успехом, поскольку я не смог перевести использование обработчика запросов с django на gae.Я получаю предварительный просмотр формы, но он не будет отображаться:

        <html><body><form method="POST" action="/preview">
    <table>
<django.contrib.formtools.preview.FormPreview object at 0x3c5ca50>
    </table><input type="submit"></form></body></html>

Код, генерирующий HTML выше:

import cgi

from google.appengine.api import users
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app

from google.appengine.ext.db import djangoforms

class Item(db.Model):
    name = db.StringProperty()
    quantity = db.IntegerProperty(default=1)
    target_price = db.FloatProperty()
    priority = db.StringProperty(default='Medium',choices=[
      'High', 'Medium', 'Low'])
    entry_time = db.DateTimeProperty(auto_now_add=True)
    added_by = db.UserProperty()

class ItemForm(djangoforms.ModelForm):
    class Meta:
        model = Item
        exclude = ['added_by']

from django.contrib.formtools.preview import FormPreview
class PreviewHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write('<html><body>'
                                '<form method="POST" '
                                'action="/preview">'
                                '<table>')
        self.response.out.write(FormPreview(ItemForm()))
        self.response.out.write('</table>'                                    
                                '<input type="submit">'
                                '</form></body></html>')



class ItemPage(webapp.RequestHandler):
    def get(self):
        query = db.GqlQuery("SELECT * FROM Item ORDER BY name")
        for item in query:
            self.response.out.write('<a href="/edit?id=%d">Edit</a> - ' %
                                    item.key().id())
            self.response.out.write("%s - Need to buy %d, cost $%0.2f each<br>" %
                                    (item.name, item.quantity, item.target_price))

class EditPage(webapp.RequestHandler):
    def get(self):
        id = int(self.request.get('id'))
        item = Item.get(db.Key.from_path('Item', id))
        self.response.out.write('<html><body>'
                                '<form method="POST" '
                                'action="/edit">'
                                '<table>')
        self.response.out.write(ItemForm(instance=item))
        self.response.out.write('</table>'
                                '<input type="hidden" name="_id" value="%s">'
                                '<input type="submit">'
                                '</form></body></html>' % id)

    def post(self):
      id = int(self.request.get('_id'))
      item = Item.get(db.Key.from_path('Item', id))
      data = ItemForm(data=self.request.POST, instance=item)
      if data.is_valid():
          # Save the data, and redirect to the view page
          entity = data.save(commit=False)
          entity.added_by = users.get_current_user()
          entity.put()
          self.redirect('/items.html')
      else:
          # Reprint the form
          self.response.out.write('<html><body>'
                                  '<form method="POST" '
                                  'action="/edit">'
                                  '<table>')
          self.response.out.write(data)
          self.response.out.write('</table>'
                                  '<input type="hidden" name="_id" value="%s">'
                                  '<input type="submit">'
                                  '</form></body></html>' % id)

def main():
    application = webapp.WSGIApplication(
                                         [('/', PreviewHandler),
                                          ('/edit', EditPage),
                                          ('/items.html', ItemPage),
                                          ],
                                         debug=True)

    run_wsgi_app(application)

Как мне реализовать PreviewHandler?Заранее спасибо

ОБНОВЛЕНИЕ: Поскольку у django есть предварительный просмотр формы, могу ли я взять шаблон из фреймворка django и создать его или создать свой собственный шаблон?Например, как включить, что пользователь нажимает кнопку «Назад», чтобы внести изменения, которые также должны инициировать проверку

<input type="button" value="&lt;-- Go back" name="back" onClick="history.back()" />

<input type="submit" name="validate" value='{% trans "Go" %}' />

1 Ответ

1 голос
/ 08 августа 2011

Документацию Django для FormPreview можно найти здесь . Это дает понять, что FormPreview предназначен для создания подклассов и используется в качестве обработчика, чего нельзя сделать в веб-приложении - это специфично для фреймворка Django. Вы, конечно, не можете просто создать экземпляр объекта FormPreview с вашей формой и ожидать, что строковое представление будет полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...