python - Django 表单 as_table(), as_p() 方法不起作用

标签 python django django-forms python-3.3

我有一个简单的表单类,其中定义了以下单个字段:

class LaunchForm(forms.Form):

    file_name = forms.FileField(required=True, label='File to import')

在我的模板中我有:

<form action="" method="post">
    {{ form.file_name }}
    <table>
        {{ form.as_table }}
    </table>
    {% csrf_token %}
    <input type="submit" value="Submit">
</form>

表单正在从 View 中调用,如下所示:

class Application_Launch_View(View):

    form_class = LaunchForm
    template_name = 'application_launch.html'

    def get(self, request, app_id):
        form = self.form_class(application_id=app_id)
        return render(request, self.template_name, {'form': form})

我将变量 {{ form.file_name }} 放入模板只是为了验证表单字段是否存在。在我的浏览器页面上显示的内容(以及模板中的所有其他内容)是:

<django.forms.fields.FileField object at 0x032A08F0> 

但是 form.as_table 似乎没有产生任何结果。

我尝试在我的 View 中实例化表单后立即发出以下函数调用,就在调用 render() 函数之前:

打印(表格.文件名) 打印(表格。as_table())

服务器日志显示:

<django.forms.fields.FileField object at 0x032A08F0>

后跟一个空格。如果我删除对 as_table() 的调用,则不会出现空格。我尝试在 View 中替换 form.as_p(),但得到了相同的结果,所以看起来这两种方法至少都输出了 CR 或 CR/FL 对。

看起来一切正常,除了 as_table()as_p() 方法,我不明白为什么...

++++++++++++++++++++

在更深入地研究这个问题时,我注意到另一种形式,当从模板中引用表单上的 Django 字段对象时,不会产生我上面发布的对象类描述,而是预期的表单字段。

所以我不得不问,下面两种建立表单域的方法有什么区别,有没有办法使第二种方法(在__init__()中)起作用?

方法 1(可行):

class LaunchForm:

    file_name = forms.FileField(required=True,
                        label='File to import',
                        initial='Default value')

方法 2(这行不通):

class LaunchForm:

    def __init__(self, *args, **kwargs)

        self.file_name = forms.FileField(required=True,
                        label='File to import',
                        initial='Default value')

最佳答案

您似乎将表单类本身而不是它的实例传递给模板。你应该做这样的事情:

form = LaunchForm()
return render(request, 'my_template.html', {'form': form})

等等

编辑

要在 __init__ 中动态添加一个字段,您需要将其分配给 self.fields 字典:

self.fields['file_name'] = forms.FileField(...)

关于python - Django 表单 as_table(), as_p() 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261110/

相关文章:

python - 如何修复 'TypeError: __init__() got an unexpected keyword argument ' 发件人”

python - 使用 Python 收集历史 30 年国债价格

Django:AttributeError 'WSGIRequest' 对象没有属性 'get'

python - 在 graphene_django 中使用 DjangoFilterConnectionField 和自定义连接

python - Django修改pip安装的应用程序的模板

Django mod-wsgi 错误 500 - 日志文件中没有任何用处

python - 覆盖 django 管理事件日志

django-templates - Django 添加类以形成 &lt;input ..> 字段

python - Django 1.9 URLField 删除必要的 http ://prefix

python - Scrapy xpath 在 python 中返回空列表