1

我是当前的 web2py 用户,但发现我仍然偶尔会回到 Django(我开始的地方)。特别是在我想要使用 web2py 中尚不存在的一些特定 django 应用程序/插件/扩展的项目上工作时。

在 web2py 中我不能没有的一件事,我正在 Django 中寻找解决方案,是从 db 表创建 html 表单并能够在视图中自定义它们的外观和布局的方法,无需 javascript .

我正在寻找的关键内容:

  1. 从 db 表生成 html 表单
  2. 将自定义 css 类/ID 分配给生成的 html 表单中的每个字段(禁用 js)
  3. 通过视图中的方法调用将每个表单字段/元素放置在预制的 html 视图中

IE

我有一张表 A。在 web2py 中我可以做(在控制器中):

def display_form():
   form = SQLFORM(db.table_A)
   #Can I do the following in Django? Assign custom CSS to each form field?
   form.element(_name='email')['_class'] = = "custom_css_classes, list"

   if form.accepts(request.vars, session):
       response.flash = 'form accepted'
   elif form.errors:
       response.flash = 'form has errors'
   else:
       response.flash = 'please fill out the form'
   return dict(form=form)

然后,在视图中我可以这样做:

form.custom.start
form.custom.widget.name
form.custom.widget.email
form.custom.widget.form_field_name
           ...
<div class="span-5 last"><input type="submit" class="register_btn" value="Sign Up"></input></div>
form.custom.end

上面需要一个 DB 表,创建一个 HTML 表单,然后让我将每个单独的表单字段粘贴在我想要的预制 HTML 中的任何位置(使用传递的“表单”对象上的那些“自定义”方法调用。包括我分配给生成的 html 表单的每个单独字段的自定义 css 类。

有关上述代码的详细信息,请参阅文档:

http://web2py.com/book/default/chapter/06?search=define_table

http://web2py.com/book/default/chapter/07?search=sqlform#SQLFORM

http://web2py.com/book/default/chapter/05?search=#Server-side-DOM-and-Parsing

http://web2py.com/book/default/chapter/07?search=form.custom

如何在 Django 中执行上述操作,而不用布局黑客弄脏我的 javascript。假设在我需要运行我的应用程序的浏览器中禁用了 javascript。此外,我很想使用 Django admin。也欢迎 Pylons 解决方案!

对此文章/教程/操作方法的链接将不胜感激。另外,请使用您在回复中提到的方法对上述代码进行等效结果...

4

2 回答 2

1

如果您还没有,请查看 Django 的ModelForm。我假设您已将模型映射到相关表。VanillaModelForm实例可以在没有 JS 的情况下工作。然而ModelForms 通常是提前定义的,而不是动态构建的。我想它们可以即时创建,但这有点棘手。

于 2010-08-07T19:20:40.590 回答
1

通过显式声明它们来使用ModelForm和覆盖您想要自定义的任何字段。

如果要设置字段属性,如classand id,则需要执行以下操作:

name = forms.CharField(
                widget=forms.TextInput(attrs={'class':'special'}))

fields如果您有兴趣,您可以通过在您的类中指定一个序列来更改字段的顺序Meta

class Meta:
    model = YourModel
    fields = ('title', 'content')

你可以在这里阅读完整的文档:http: //docs.djangoproject.com/en/dev/ref/forms/widgets/#django.forms.Widget.attrs

于 2010-08-08T04:08:56.287 回答