使用django-bootstrap,django-bootstrap-form,django-bootstrap-toolkit,django之一渲染Django forms.ChoiceField作为Twitter Bootstrap下拉列表的最有效方式(在编程/维护工作方面,优雅方面)是什么? -crispy-forms等应用程序?在任何这些应用程序中是否明确支持此用例?
TemplateDoesNotExist将 Crispy Forms 与 Django 结合使用,只有在使用 Crispy Forms 的任何功能时才会出现错误。
由于我是 Crispy Forms 的新手(似乎普遍建议使用它来快速使表单看起来更好),因此我按照https://django-crispy-forms.readthedocs.io/en/latest/install.html中的说明进行操作据我所知,安装是正确的(使用安装pip并更改settings.py)。.venv我在 Windows 计算机上的虚拟环境(下面提到的文件夹)中运行它。
我什至专门创建了一个新项目来研究这个问题,内容绝对很少,但同样的问题仍然存在。该项目称为“stuff”,其中的单个应用程序称为“other”。
设置.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crispy_forms',
'other',
'bootstrap4'
]
CRISPY_TEMPLATE_PACK = 'bootstrap4'
...
Run Code Online (Sandbox Code Playgroud)
模型.py
from django.db import models
class Mine(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
Run Code Online (Sandbox Code Playgroud)
表格.py
from django import forms
from .models import Mine
class MineForm(forms.ModelForm):
class Meta:
model = Mine
fields = ('name','email')
Run Code Online (Sandbox Code Playgroud)
视图.py
from django.shortcuts …Run Code Online (Sandbox Code Playgroud) 我一直在以脆弱的形式运行,它似乎完全符合我的要求:使用引导程序布局渲染表单.
现在,这个例子谈论使用forms.Form.这没关系,我可以通过编写如下代码来创建我的:
class TemplateCreateForm(forms.Form):
title = forms.CharField(label=(u'Task name'))
description = forms.CharField(label=(u'Task description'))
url_start = forms.CharField(label=(u'Start page url'))
url_end = forms.CharField(label=(u'Final page url'))
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.add_input(Submit('submit', 'Submit'))
super(TemplateCreateForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
但是,如何进行更新?因为如果我把它放在视图中:
form = TemplateCreateForm(request.POST or None, instance=template)
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为实例仅适用于ModelForm.
现在,我可以用forms.Formwith 替换ModelForm并使用Crispy形式的ModelForm吗?我这样做了
class TemplateCreateForm(ModelForm):
title = forms.CharField(label=(u'Task name'))
description = forms.CharField(label=(u'Task description'))
url_start = forms.CharField(label=(u'Start page url'))
url_end = forms.CharField(label=(u'Final page url'))
def __init__(self, *args, **kwargs): …Run Code Online (Sandbox Code Playgroud) 有没有人知道是否有正确的方法来清除香脆的标签?
我得到了这个:
self.fields['field'].label = ""
Run Code Online (Sandbox Code Playgroud)
但这不是一个很好的解决方案.
我在Twitter Bootstrap上使用django-crispy-forms,我在将表单自定义为多行和多列时遇到了一些问题.一个示例问题是当我尝试将表单拆分为两列时没有任何反应:
class SomeForm(ModelForm):
helper = FormHelper()
helper.layout = Layout(
Column('field1', 'field3'),
Column('field2', 'field4'),
)
)
class Meta:
model = Model
Run Code Online (Sandbox Code Playgroud)
查看html输出,我看到有<div class="formColumn">,但表单显示在一个列中.也许这是一个CSS问题?我正在使用Bootstrap 2.1.
我有一个django Formset,我想在另一个表单的中间进行布局.我正在使用django-crispy-forms在父表单中设置布局__init__:
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit, Layout, Field, Div
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.layout = Layout(
Div(
Div(Field('foo'), css_class='span3'),
Div(Field('bar'), css_class='span4'),
css_class='row'
),
Field('baz', css_class='span1'),
...
)
self.helper.add_input(Submit('submit', 'Submit', css_class='btn btn-primary offset4'))
Run Code Online (Sandbox Code Playgroud)
我的模板只是使用{% crispy %}标记呈现表单.
我想知道如何合并formset.我应该在上面的init函数中实例化它吗?我怎么在那里引用它?
还有其他一些在线形式和formset组合的例子,其中一个是连续渲染的,但是我想知道我是否可以更好地控制它们如何与crispy的布局结合在一起.
我正在为我的 django 项目构建一个注册表单,并且为了设计它,我使用了脆脆的表单。但是,当我运行服务器并转到注册页面时,我看到以下错误:
Internal Server Error: /users/register/
Traceback (most recent call last):
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Dell\Desktop\Django\microblog\venv\lib\site-packages\django\template\base.py", …Run Code Online (Sandbox Code Playgroud) 我们有一个脆弱的形式,我们希望能够在表单HTML模板的不同部分呈现不同的字段,但是我们在Crispy文档中找不到这样做的方法.下面是一些稍微简化的代码,用于说明我们要做的事情:
forms.py
helper = FormHelper()
helper.layout_1 = Layout(
Div(
Field('field_1a'),
Field('field_1b')
)
)
helper.layout_2 = Layout(
Div(
Field('field_2a'),
Field('field_2b')
)
)
Run Code Online (Sandbox Code Playgroud)
template.html
<body>
{% crispy form layout_1 %}
<!-- A big bunch of other html -->
{% crispy form layout_2 %}
</body>
Run Code Online (Sandbox Code Playgroud)
有谁知道实现这一目标的干净方法?
到目前为止我们已经看过的方法必须排除:
choice字段,其选项以编程方式确定.crispy.forms.layout.HTML对象来包含HTML,它将我们布局的两个不同部分分开.但是,有很多HTML,如果我们将它直接嵌入到python中,将很难维护.我安装了bootstrap3
$ pip install django-bootstrap3
Run Code Online (Sandbox Code Playgroud)
它正在安装在此目录中
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/
Run Code Online (Sandbox Code Playgroud)
Django似乎在看这个目录
/Users/shawnpike/anaconda/lib/python2.7/site-packages/django/
Run Code Online (Sandbox Code Playgroud)
当我在INSTALLED_APPS =('bootstrap3')变量中放入'bootstrap3'然后运行
$ python manage.py runserver
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/shawnpike/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/Users/shawnpike/anaconda/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
django.setup()
File "/Users/shawnpike/anaconda/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/shawnpike/anaconda/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/Users/shawnpike/anaconda/lib/python2.7/site-packages/django/apps/config.py", line 87, in create
module = import_module(entry)
File "/Users/shawnpike/anaconda/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named bootstrap3
Run Code Online (Sandbox Code Playgroud)
我使用复制和粘贴在django文件夹中安装了bootstrap3,但这不起作用.任何帮助将不胜感激. …
那里有很多日期/日期时间选择器实现.是否有任何与Django和Crispy Forms集成的特别好,它们是如何使用的?
我希望尽量减少开发工作,最大限度地提高简单性,并利用Django本地化.
日期字段的Django/Crispy标准输出:
<input class="dateinput form-control" id="id_birth_date" name="birth_date" type="text" value="21/07/2015">
Run Code Online (Sandbox Code Playgroud)
在模型中:
birth_date = models.DateField(verbose_name='D.O.B', auto_now_add=False, auto_now=False)
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:
档案型号:
from django.db import models
class Profile(models.Model):
birth_date = models.DateField(verbose_name='D.O.B', auto_now_add=False, auto_now=False)
Run Code Online (Sandbox Code Playgroud)
个人资料表格:
from django import forms
from profiles.models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
birth_date = forms.DateField(
widget=forms.TextInput(
attrs={'type': 'date'}
)
)
Run Code Online (Sandbox Code Playgroud)
档案查看:
from django.shortcuts import get_object_or_404
from django.contrib.auth import get_user_model
from profiles.models import Profile
from profiles.forms import ProfileForm
User = get_user_model()
def edit(request):
profile = get_object_or_404(Profile, …Run Code Online (Sandbox Code Playgroud) django ×10
django-forms ×4
python ×2
bootstrap-4 ×1
date ×1
datepicker ×1
datetime ×1
forms ×1
label ×1
layout ×1