2015-01-09 45 views
0

我目前正在使用Django和JQuery设计一个收件人网站。我拥有存储在数据库中的成分和配方说明以及适当的Django视图。下面是一个例子截图:Django和JQuery:提示时显示表单

Example recipe

我想给用户选项编辑配方的成分。当用户点击“编辑”按钮时,我想用剩余的文本替换文本,并在表格中预先填入当前配料成分。事情是这样的:

Example recipe with first item editing

什么是添加/删除这些文字输入区域的最佳方式?目前,我正在使用样式元素display: nonedisplay: initial完成工作。有没有更好的办法?

+0

我觉得这个问题很广泛。有很多移动部件。对于初学者,通过检查模板中的“{%user.is_authenticated%}”隐藏编辑按钮。接下来,点击按钮(编辑),通过ajax。如果您发现自己陷入困境,可能是您可以编辑问题,并发布您面临的更具体的问题。 – karthikr

+0

是的。我确实做得很一般。我会尽力削减它。 – Peaches491

回答

1

您可以检查用户是否已通过身份验证。如果用户被认证,则设置变量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 %} 
+0

谢谢你的回应!不过,我刚刚编辑了缩小这个问题的帖子。不幸的是,您的回复回答了我已经删除的问题的部分 – Peaches491

+0

我最终将您的答案纳入了我一直在做的事情。 – Peaches491

0

所以,我想我找到了正确的解决方案,这是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"); 
    } 
}