django 不添加元素到列表
django not adding element to list
这是我拥有的:
from django.shortcuts import render
from django import forms
from django.http import HttpResponseRedirect
from django.urls import reverse
class NewTaskForm(forms.Form):
task = forms.CharField(label=‘New Task’)
priority = forms.IntegerField(label =‘priority’,
min_value=1,max_value=5)
Create your views here.
def index(request):
if "tasks" not in request.session:
request.session['tasks'] = []
return render(request, "tasks/index.html", {
"tasks": request.session['tasks']
})
def add(request):
if request.method == “POST”:
task = request.POST.get(‘task’)
form = NewTaskForm(request.POST)
if form.is_valid():
task = form.cleaned_data[“task”]
request.session['tasks'] += [task]
# or we can try doing it this way
# request.session['tasks'] += task
return HttpResponseRedirect(reverse("tasks:index"))
else:
return render(request, "tasks/add.html",{
"form": form
})
return render(request, "tasks/add.html",{
"form": NewTaskForm()
})
然后在 index.html 中我们有:
{% extends ‘tasks/layout.html’ %}
{% block body %}
<h1>Tasks</h1>
<ul>
{% for task in tasks %}
<li>{{task}}</li>
{% empty %}
<li>No tasks</li>
{% endfor %}
</ul>
<a href="{% url 'tasks:add' %}">Add a new task</a>
{% endblock %}
问题来了:
如果我们使用 request.session[‘tasks’] += [task] where task = ‘abc’
我们进入 html abc
但是如果我们使用:request.session[‘tasks’] += ‘abc’
我们进入 html :
一个
b
c
不确定问题出在哪里,但也许下面的解释会有所帮助:
# adding two lists:
l1 = [1, 2]
l1 += ['abc']
print(l1) # prints [1, 2, 'abc']
# adding a string to a list:
l2 = [5, 6]
l2 += 'abc'
print(l2) # prints [5, 6, 'a', 'b', 'c']
这是我拥有的:
from django.shortcuts import render
from django import forms
from django.http import HttpResponseRedirect
from django.urls import reverse
class NewTaskForm(forms.Form):
task = forms.CharField(label=‘New Task’)
priority = forms.IntegerField(label =‘priority’,
min_value=1,max_value=5)
Create your views here.
def index(request):
if "tasks" not in request.session:
request.session['tasks'] = []
return render(request, "tasks/index.html", {
"tasks": request.session['tasks']
})
def add(request):
if request.method == “POST”:
task = request.POST.get(‘task’)
form = NewTaskForm(request.POST)
if form.is_valid():
task = form.cleaned_data[“task”]
request.session['tasks'] += [task]
# or we can try doing it this way
# request.session['tasks'] += task
return HttpResponseRedirect(reverse("tasks:index"))
else:
return render(request, "tasks/add.html",{
"form": form
})
return render(request, "tasks/add.html",{
"form": NewTaskForm()
})
然后在 index.html 中我们有:
{% extends ‘tasks/layout.html’ %}
{% block body %}
<h1>Tasks</h1>
<ul>
{% for task in tasks %}
<li>{{task}}</li>
{% empty %}
<li>No tasks</li>
{% endfor %}
</ul>
<a href="{% url 'tasks:add' %}">Add a new task</a>
{% endblock %}
问题来了:
如果我们使用 request.session[‘tasks’] += [task] where task = ‘abc’
我们进入 html abc
但是如果我们使用:request.session[‘tasks’] += ‘abc’ 我们进入 html :
一个
b
c
不确定问题出在哪里,但也许下面的解释会有所帮助:
# adding two lists:
l1 = [1, 2]
l1 += ['abc']
print(l1) # prints [1, 2, 'abc']
# adding a string to a list:
l2 = [5, 6]
l2 += 'abc'
print(l2) # prints [5, 6, 'a', 'b', 'c']