我目前正在使用Django和JQuery设计一个收件人网站。我拥有存储在数据库中的成分和配方说明以及适当的Django视图。下面是一个例子截图:Django和JQuery:提示时显示表单
我想给用户选项编辑配方的成分。当用户点击“编辑”按钮时,我想用剩余的文本替换文本,并在表格中预先填入当前配料成分。事情是这样的:
什么是添加/删除这些文字输入区域的最佳方式?目前,我正在使用样式元素display: none
和display: initial
完成工作。有没有更好的办法?
我目前正在使用Django和JQuery设计一个收件人网站。我拥有存储在数据库中的成分和配方说明以及适当的Django视图。下面是一个例子截图:Django和JQuery:提示时显示表单
我想给用户选项编辑配方的成分。当用户点击“编辑”按钮时,我想用剩余的文本替换文本,并在表格中预先填入当前配料成分。事情是这样的:
什么是添加/删除这些文字输入区域的最佳方式?目前,我正在使用样式元素display: none
和display: initial
完成工作。有没有更好的办法?
您可以检查用户是否已通过身份验证。如果用户被认证,则设置变量True
,如果不是,则设置False
。
# views.py
def my_view(request):
if user.is_authenticated():
auth_user = True
else:
auth_user = False
# other code ...
return render(... {'auth_user': auth_user, ...})
然后在您的模板中,根据变量auth_user
渲染窗体。
{% if auth_user %}
Display the form
{% else %}
Display something else
{% endif %}
谢谢你的回应!不过,我刚刚编辑了缩小这个问题的帖子。不幸的是,您的回复回答了我已经删除的问题的部分 – Peaches491
我最终将您的答案纳入了我一直在做的事情。 – Peaches491
所以,我想我找到了正确的解决方案,这是xyres'的答案,我已经试图做的组合。这里是我的最终结果一些示例代码:
<h1>{{ recipe.name }}</h1>
<ul>
{% for item in recipe.line_items.all %}
<li>
<span id="item{{forloop.counter}}_hide">{{ item.full_name }}</span>
{% if user_auth %}
<form id="item{{forloop.counter}}_show"
{# action="{% url 'line_item:edit' %}"#}
class="hide-initial"
style="display: inline">
{% csrf_token %}
<input type="text" name="amount" size="2" value="{{ item.amount }}"/>
<input type="text" name="unit" size="4" value="{{ item.unit }}"/>
<input type="text" name="name" size="10" value="{{ item.ingredient_adjective }}"/>
<input type="text" name="name" size="10" value="{{ item.ingredient_name }}"/>
<br>
<input type="submit" name="submit" value="Submit">
<input type="button" name="cancel" value="Cancel"
onclick="myFunction('item'+{{forloop.counter}}, true)">
</form>
<button id="item{{forloop.counter}}_hide" onclick="myFunction('item'+{{forloop.counter}})">Edit</button>
{% endif %}
</li>
{% empty %}
<li>No ingredients required!</li>
{% endfor %}
{% if user_auth %}
<button>Add Ingredient</button>
{% endif %}
</ul>
此模板,伴随着的JavaScript以下位将允许用户切换形式的知名度,分别为每个不同的成分。
$(".hide-initial").css("display", "none");
function myFunction(inp, reverse) {
var show_elements = $("#" + inp + "_show");
var hide_elements = $("#" + inp + "_hide");
if(!reverse) {
show_elements.css("display", "initial");
hide_elements.css("display", "none");
} else {
hide_elements.css("display", "initial");
show_elements.css("display", "none");
}
}
我觉得这个问题很广泛。有很多移动部件。对于初学者,通过检查模板中的“{%user.is_authenticated%}”隐藏编辑按钮。接下来,点击按钮(编辑),通过ajax。如果您发现自己陷入困境,可能是您可以编辑问题,并发布您面临的更具体的问题。 – karthikr
是的。我确实做得很一般。我会尽力削减它。 – Peaches491