【问题标题】:Why can't I fully get the value which is a list in python dictionary (Django request)?为什么我不能完全获取 python 字典中的列表值(Django 请求)?
【发布时间】:2021-10-17 07:29:20
【问题描述】:

我有一个表单,里面是一个带有选项的选择标签,它看起来像这样:

<form method="POST">
    {% csrf_token %}
    <div class="row">
        <div class="col-sm-3">
            <h4 class="mb-0 mt-2">Title:</h4>
        </div>
        <div class="col-sm-9">
            <input type="text" name="title" class="form-control" placeholder="Blogpost Title">
        </div>
    </div>
    <hr>

    <div class="row">
        <div class="col-sm-3">
            <h4 class="mb-0 mt-2">Tags:</h4>
        </div>
        <div class="col-sm-9">
            <select class="form-select" name="tags" multiple aria-label="multiple select example" required>
                {% for tag in tags %}
                    <option value="{{tag.name}}">{{tag.name}}</option>
                {% endfor %}
            </select>
        </div>
    </div>
    <hr>
    
    <div class="row">
        <div class="col-sm-3">
            <h4 class="mb-0 mt-2">Description:</h4>
        </div>
        <div class="col-sm-9">
            <textarea name="desc" class="form-control" id="exampleFormControlTextarea1" rows="4" placeholder="Blogpost Description (HTML supported)"></textarea>
        </div>
    </div>
    <hr>

    <div class="text-center">
        <button type="submit" class="btn btn-primary">Create</button>
    </div>
</form>

这是我的观点,我正在处理它:

def create_blogpost(request, id):
    user = User.objects.get(id=id)
    tags = Tag.objects.all()

    if request.method == 'POST':
        title = request.POST['title']
        blogpost_tags = request.POST['tags']
        desc = request.POST['desc']

        # BlogPost.objects.create(
        #     title=title,
        #     profile=user,
        #     tags=tags,
        #     desc=desc
        # )

    else:
        pass

    context = {
        'user': user,
        'tags': tags
    }
    return render(request, 'main/create_blogpost.html', context)

当我打印出 request.POST 时,它看起来像这样:

request.POST &lt;QueryDict: {'csrfmiddlewaretoken': ['TOKEN'], 'title': ['blogpost title'], 'tags': ['Python', 'C++'], 'desc': ['']}&gt;

这里我选择了 2 个标签:Python 和 C++,但是当我打印出变量 blogpost_tags 时,它只显示列表的最后一个元素,在本例中是 C++。

为什么会这样?我是不是做错了什么?

【问题讨论】:

    标签: python django dictionary


    【解决方案1】:

    其实这是一个功能,您的代码没有任何问题,请阅读this

    这背后的原因是 API 方法应该始终返回字符串或列表,但不能同时返回两者。 Web 应用程序中的常见情况是表单键与单个值相关联,这就是 [] 语法的作用。 getlist() 适用于您打算多次使用键来获取单个值的情况(例如您的情况)。

    你可以得到这样的列表:

    blogpost_tags = request.POST.getlist('tags')
    

    我希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      相关资源
      最近更新 更多