如何将 class 变量获取到 Django 模板
How to get class variable to Django template
我刚刚开始创建 Django 应用程序。我在 models.py
中有一个 class,它有一个 class 变量 CATEGORY_CHOICES
,其中包含选择字段的值。
#models.py
from django.db import models
from django.utils import timezone
class Entry(models.Model):
CATEGORY_CHOICES = (
('c1','choice 1'),
('c2','choice 2'),
('c3','choice 3'),
('c4','choice 4'),
)
date = models.DateField(default=timezone.now)
time = models.TimeField(default=timezone.now)
category = models.CharField(choices=CATEGORY_CHOICES,blank=False,null=False,max_length=2)
value = models.TextField()
我想为创建 class 条目的瞬间制作表格。 select
菜单有问题,我想在其中输入 CATEGORY_CHOICES
的值,但我不知道如何操作。
<!-- homepage.html -->
{% load staticfiles %}
{% load app_filters %}
<HTML>
<HEAD>
<TITLE>Website title</TITLE>
<link rel="stylesheet" href="{% static "css/app.css" %}">
</HEAD>
<BODY>
<form method="POST" class="form-inline">{% csrf_token %}
<input type="date" class="form-control" id="date-input">
<input type="time" class="form-control" id="time-input">
<select class="form-control">
{% for choice in Entry.CATEGORY_CHOICES %}
<option>{{ choice|get_at_index:1 }}</option>
{% endfor %}
</select>
<input type="text" class="form-control" id="value-input" placeholder="Value">
<input type="submit" value="OK">
</form>
</BODY>
</HTML>
这是一个 4 元素列表,因此 {% for choice in Entry.CATEGORY_CHOICES %}
应该将单个 2 元素列表(第一个 ('c1','choice 1')
然后 ('c2','choice 2')
等)保存到变量 choice
中。我在 help od custom filter get_at_index
.
的帮助下选择列表的第二个元素
#app_filters.py
from django import template
register = template.Library()
@register.filter(name='get_at_index')
def get_at_index(list, index):
return list[index]
我没有收到任何错误,但在最终形式中,select 菜单中没有任何选项。
可能出了什么问题以及如何解决?
#views.py
from django.shortcuts import render
from .forms import EntryForm
def home_page(request):
form = EntryForm()
return render(request, 'app/homepage.html', {'form':form})
和forms.py
#forms.py
from django import forms
from .models import Entry
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ('date','time','category','value',)
在您看来,您正在将表单传递给模板,但您没有按照预期的方式在模板中使用表单。要使用您传递下来的表单,请像这样在模板中编写您的表单代码:
<form method="POST" class="form-inline">
{% csrf_token %}
{{ form }}
<input type="submit" value="OK">
</form>
它会为您呈现整个表单。您可以在官方文档中阅读更多相关信息:Building a form in Django
或者,如果您想自己构建表单,则需要将代码发送到您视图中的模板:
def home_page(request):
form = EntryForm()
return render(request, 'app/homepage.html', {
'form': form,
'entry_choices': Entry.CATEGORY_CHOICES
})
然后使用密钥 entry_choices.
在您的模板中访问它
我刚刚开始创建 Django 应用程序。我在 models.py
中有一个 class,它有一个 class 变量 CATEGORY_CHOICES
,其中包含选择字段的值。
#models.py
from django.db import models
from django.utils import timezone
class Entry(models.Model):
CATEGORY_CHOICES = (
('c1','choice 1'),
('c2','choice 2'),
('c3','choice 3'),
('c4','choice 4'),
)
date = models.DateField(default=timezone.now)
time = models.TimeField(default=timezone.now)
category = models.CharField(choices=CATEGORY_CHOICES,blank=False,null=False,max_length=2)
value = models.TextField()
我想为创建 class 条目的瞬间制作表格。 select
菜单有问题,我想在其中输入 CATEGORY_CHOICES
的值,但我不知道如何操作。
<!-- homepage.html -->
{% load staticfiles %}
{% load app_filters %}
<HTML>
<HEAD>
<TITLE>Website title</TITLE>
<link rel="stylesheet" href="{% static "css/app.css" %}">
</HEAD>
<BODY>
<form method="POST" class="form-inline">{% csrf_token %}
<input type="date" class="form-control" id="date-input">
<input type="time" class="form-control" id="time-input">
<select class="form-control">
{% for choice in Entry.CATEGORY_CHOICES %}
<option>{{ choice|get_at_index:1 }}</option>
{% endfor %}
</select>
<input type="text" class="form-control" id="value-input" placeholder="Value">
<input type="submit" value="OK">
</form>
</BODY>
</HTML>
这是一个 4 元素列表,因此 {% for choice in Entry.CATEGORY_CHOICES %}
应该将单个 2 元素列表(第一个 ('c1','choice 1')
然后 ('c2','choice 2')
等)保存到变量 choice
中。我在 help od custom filter get_at_index
.
#app_filters.py
from django import template
register = template.Library()
@register.filter(name='get_at_index')
def get_at_index(list, index):
return list[index]
我没有收到任何错误,但在最终形式中,select 菜单中没有任何选项。
可能出了什么问题以及如何解决?
#views.py
from django.shortcuts import render
from .forms import EntryForm
def home_page(request):
form = EntryForm()
return render(request, 'app/homepage.html', {'form':form})
和forms.py
#forms.py
from django import forms
from .models import Entry
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ('date','time','category','value',)
在您看来,您正在将表单传递给模板,但您没有按照预期的方式在模板中使用表单。要使用您传递下来的表单,请像这样在模板中编写您的表单代码:
<form method="POST" class="form-inline">
{% csrf_token %}
{{ form }}
<input type="submit" value="OK">
</form>
它会为您呈现整个表单。您可以在官方文档中阅读更多相关信息:Building a form in Django
或者,如果您想自己构建表单,则需要将代码发送到您视图中的模板:
def home_page(request):
form = EntryForm()
return render(request, 'app/homepage.html', {
'form': form,
'entry_choices': Entry.CATEGORY_CHOICES
})
然后使用密钥 entry_choices.
在您的模板中访问它