我的python / django网络应用程序遇到了一些麻烦。我正在尝试启用和禁用管理区域中的某些内容,以便在前端显示或不显示。
单击链接后,我希望通过传入main.id来执行名为updatevisibilitymain的函数。问题是它会在页面加载时自动触发,如果你单击一个链接全部三个fire并分别根据main.id更新每个主项目。我只希望一次启动一个链接,而不是在页面加载时自动触发。
我的问题是我的链接。
<a href="" id="{{main.id}}" onclick="{% updatevisiblitymain main.id %}" class="toggler"><i class="{% isvisible main.is_visible %}" aria-hidden="true"></i></a>
当我加载页面时,点击其自动调用并禁用和/或启用每个页面加载。最重要的是,我有两个链接,因为它们是在for循环中创建的。如果我点击它们中的任何一个,它们都将执行并禁用或启用该对象。任何人对如何解决这个问题都有任何想法?
我已经尝试在href区域内放置一个#,然后单击时onclick函数不起作用。
编辑:updatevisibilitymain
@register.simple_tag
def updatevisiblitymain(cid):
""" Updates the visibility of the main category """
print cid
main = MainCategory.objects.get(pk=cid)
visible = main.is_visible
if visible:
main.is_visible = False
main.save()
logger.debug('Main Category %s has been marked false.' % main.name)
else:
main.is_visible = True
main.save()
logger.debug('Main Category %s has been marked true.' % main.name)
django模板
<div class="row">
{% if sub_cats %}
{% for sub in sub_cats %}
{% if sub.main_category_id == main_id %}
<div class="pull-left pad-10">
{% for main in main_cats %}
{% if main.id == main_id %}
<a href="" id="{{main.id}}" onclick="{% updatevisiblitymain main.id %}" class="toggler"><i class="{% isvisible main.is_visible %}" aria-hidden="true"></i></a>
<span class="form-section">{{ main.name }}</span>
<a href="" class="gutter"><i class="{% helptext main.help_text %}" aria-hidden="true"></i></a>
<a href="/MFA/DeleteItem/maincat/{{main.id}}" class="gutter"><i class="fa fa-lg fa-trash-o red" aria-hidden="true"></i></a>
{% endif %}
{% endfor %}
</div>
{% endif %}
{% endfor %}
{% endif %}
</div>
答案 0 :(得分:1)
您还没有理解前端和后端代码之间的区别。
onclick
是一个Javascript事件处理程序。它应该包含在前端执行的JS代码。
Django模板语言在后端执行。它在渲染时被调用,当用户第一次请求页面时,而不是当它们与页面交互时。
执行此操作的方法是编写一个JS函数,该函数使用Ajax调用更新可见状态的Django视图。