ich bin neu bei Django und möchte ein einfaches Formular erstellen. Laut Doc kann ich ein Formular mit dem Formularmodul von Django erstellen
from Django import forms
class CronForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField(required=False, label='Your e-mail address')
message = forms.CharField(widget=forms.Textarea)
def clean_message(self):
message = self.cleaned_data['message']
num_words = len(message.split())
if num_words < 4:
raise forms.ValidationError("Not enough words!")
return message
was ich wissen möchte ist, wie man eine Dropdown-Liste von Tagen im Monat erstellt, d. h. von 1 bis 31?
einige haben es mit Javascript in ihrer Formularvorlage getan. Kann dies in Django gemacht werden?
Sie suchen eine ChoiceField
, die standardmäßig als select
html-Element dargestellt wird . https://docs.djangoproject.com/de/dev/ref/forms/fields/#choicefield
class CronForm(forms.Form):
days = forms.ChoiceField(choices=[(x, x) for x in range(1, 32)])
sie können mit dem manuellen Rendern der Felder beginnen. Ein einfaches Beispiel:
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
Dadurch wird das Formular ohne Formatierung gerendert. Anschließend müssen Sie die relevante Klasse anwenden, um eine Dropdown-Liste (aus w3c Dropdown-CSS kopiert) zu erstellen: -
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">Tutorials
<span class="caret"></span></button>
<ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">HTML</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">CSS</a></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">JavaScript</a></li>
<li role="presentation" class="divider"></li>
<li role="presentation"><a role="menuitem" tabindex="-1" href="#">About Us</a></li>
</ul>
</div>
</div>
die beiden kombinieren: -
<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">Days
<span class="caret"></span></button>
<div class="fieldWrapper">
<ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
{% for field in form %}
<li class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</li>
{% endfor %}
</ul>
</div>
</div>