【问题标题】:django not adding element to listdjango没有将元素添加到列表中
【发布时间】:2020-11-14 04:06:22
【问题描述】:

这是我所拥有的:

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

【问题讨论】:

  • 不要以为我明白问题所在 - 在一种情况下,您正在添加一个列表,而在另一种情况下,您正在添加一个字符串 - 您是否在某处遇到错误?
  • 在第一种情况下我们得到 ['abc'] 在第二种情况下我们得到 ['a','b','c']
  • 是的——这是正常的python行为——你想做什么却无法完成?

标签: django list session


【解决方案1】:

不确定问题是什么,但也许这个解释会有所帮助:

# 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']

【讨论】:

    猜你喜欢
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多