有人可以检查我应该如何正确编写views.py部分吗?
如果我编码:
from django.shortcuts import render, redirect
def shifts_table(request):
print(request.POST['value'])
return render(request, 'shifts_table.html', {})
...至少该页面可以运行,但是如果我不像下面这样编码,则知道为什么吗?
from django.shortcuts import render, redirect
from django.contrib import messages
def shifts_table(request):
if request.method == 'POST':
number = request.POST['value']
if number.is_valid():
number.save()
return redirect('shifts_table.html')
else:
messages.success(request, ('Seems Like There Was An Error...'))
return render(request, 'home.html', {})
else:
return render(request, 'shifts_table.html', {})
home.html:
<form action="{% url 'shifts_table' %}" method='POST'>
{% csrf_token %}
<label for='number'>Number:</label>
<input type="number" name="value" placeholder="2020" required><br/>
<button type="submit">submit</button>
</form>
urls.py:
urlpatterns = [
path('', views.home, name='home'),
path('shifts_table', views.shifts_table, name='shifts_table'),
]
答案 0 :(得分:0)
number = request.POST['value']
这将返回一个字符串,并且字符串没有保存方法,因此它将不起作用
我认为您有一个由该数字引用的模型,并将其保存到数据库中,您可以执行以下操作
object= yourmodel.objects.get(pk=number)
object.save()
字符串也没有为is_valid()定义,该定义用在窗体中,窗体在您的视图中未实现
保存到数据库后,您必须重定向,只有在未提交任何内容的情况下,该操作才能完成
最终代码:
def shifts_table(request):
if request.method == 'POST':
number = request.POST['value']
# check if number is valid (not empty and no spaces before or after)
if not number.strip():
object = yourmodel.objects.get(pk=number)
object.save()
return render(request, 'home.html', {})
else:
messages.success(request, ('Seems Like There Was An Error...'))
return render(request, 'home.html', {})
else:
return render(request, 'shifts_table.html', {})
答案 1 :(得分:0)
要保存变量,您只需使用会话即可
request.session['number'] = number
然后,您可以像其他任何变量一样使用request.session ['number']