Django模板变量传递时丢失空格后内容的问题求助
问题解决:表单隐藏字段含空格时仅传递首个单词
问题原因
你的模板中,隐藏输入框的value属性没有用引号包裹变量。当变量值包含空格(比如"test space space")时,HTML解析器会把第一个空格后的内容识别为新的HTML属性,导致实际提交给后端的value只有第一个单词。
修复方法
给所有input标签的value属性值加上双引号,确保完整的字符串被正确传递:
修改模板中表单部分的隐藏字段:
<input type="hidden" name="user_id" value="{{user_id}}"> <input type="hidden" name="auction_id" value="{{listing.id}}"> <input type="hidden" name="is_valid" value="True"> <input type="hidden" name="title" value="{{listing.title}}">
补充说明
- 虽然数字类型的变量(比如
user_id、listing.id)不加引号也能正常解析,但统一添加引号可以避免后续遇到字符串类型变量时再出现类似问题,是更规范的写法。 - 你提到同一模板中其他位置使用该变量能正常显示,是因为普通文本输出不需要遵循HTML属性的解析规则,直接输出完整字符串即可。
原问题代码参考
视图代码
@login_required def watchlist(request): user = request.user all_watched_auctions = WatchedAuction.objects.all() user_watched_auctions=all_watched_auctions.filter(user_id=user.id) if request.method == "POST" : auction_info = request.POST user_id = auction_info.get('user_id') auction_id = auction_info.get('auction_id') title = request.POST.get('title') # #creating a watched auction auction_to_watch = WatchedAuction(user_id=user_id, auction_id=auction_id, is_watched=True, title=title) # #preventing duplicates if auction_id not in user_watched_auctions: auction_to_watch.save() test = user_watched_auctions.values_list("auction_id", flat=True) active_listings = Listing.objects.filter(status="ACTIVE") return render(request,"auctions/watchlist.html",{ "watchlist" : test, "listings" : active_listings, "user" : user, })
模板代码(问题表单部分)
{% if listing.author_id != user_id and listing.status == "ACTIVE" %} <form action="{% url 'watchlist' %}" method="post" value="test.id"> {% csrf_token %} <input type="hidden" name="user_id" value={{user_id}}> <input type="hidden" name="auction_id" value={{listing.id}}> <input type="hidden" name="is_valid" value=True> <input type="hidden" name="title" value={{listing.title}}> <button type="submit"> add to watchlist</button> </form> {% endif %}
内容的提问来源于stack exchange,提问作者WalterBlack1
相关产品推荐
相关产品推荐

