【问题标题】:onclick auto executing in django templateonclick 在 Django 模板中自动执行
【发布时间】:2018-07-11 00:34:32
【问题描述】:

我的 python/django 网络应用程序有点问题。我正在尝试能够在管理区域中启用和禁用某些内容,以便在前端显示或不显示。

单击链接后,我希望调用 updatevisibilitymain 的函数通过传入 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>

当我加载页面时,onclick 会自动调用并禁用和/或启用每个页面加载。最重要的是,我还有两个类似的链接,因为它们是在 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>

【问题讨论】:

  • 我不确定我是否理解你想要做什么。您能否编辑问题以更清楚地说明所需的输出?
  • 希望对您有所帮助。我也在这里添加它。单击链接后,我希望通过传入 main.id 来执行名为 updatevisibilitymain 的函数。问题是它会在页面加载时自动触发,如果您单击一个链接,所有三个都会触发并根据 main.id 分别更新每个主要项目
  • 您能否发布定义updatevisiblitymain 的代码,以及您的Django 模板的其余部分?
  • 添加了我现在所拥有的。

标签: python django django-templates


【解决方案1】:

你还没有理解前端代码和后端代码的区别。

onclick 是一个 Javascript 事件处理程序。它应该包含在前端执行的 JS 代码。

Django 模板语言在后端执行。它在渲染时调用,当用户第一次请求页面时,而不是在他们与之交互时。

这样做的方法是编写一个 JS 函数,该函数使用 Ajax 调用 Django 视图来更新可见状态。

【讨论】:

  • 我以为我做错了。我会研究你的建议。感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2020-10-03
  • 1970-01-01
  • 2021-08-10
  • 2011-08-10
  • 2010-10-25
相关资源
最近更新 更多