【问题标题】:Get template block contents and call from ajax获取模板块内容并从ajax调用
【发布时间】:2016-02-15 16:16:08
【问题描述】:

我正在使用 django 1.9 和 python 3。我的英语也不是最好的,所以如果表述不好,请原谅这个问题。

我正在努力使我的网站成为一个单页应用程序。我需要获取给定模板的 {% block %} 内容,然后将其作为 HttpResponse 发送,以便 ajax 可以将其提取并注入到页面中。

我已经尝试使用这个问题的答案:Django - how to get the contents of a {% block %} tag from a template

但是当我试图在我的视图中获取一个块的内容时:

response_data[content] = get_block_source('profile/login.html', 'content')
        
        if request.is_ajax():
            return HttpResponse(
                json.dumps(response_data),
                content_type="application/json"
            )

我只是从 django 得到这个错误,不管我做什么:

ValueError at /login/ 找不到模板块内容

块的内容甚至没有进入 ajax 调用,这是什么原因?

编辑:

我将在此处包含我的“内容”块:

在我的模板中:

{% extends 'base.html' %}
{% block content %}
<div class="big-title text">Log in</div>
<div class="form-container">
    <form name="login-form" id="user" method="post" action="/login/" enctype="multipart/form-data" class="text">
        {% csrf_token %}
        <div class="title">Enter your credentials</div>
        <div class="form-row">
            <div class="form-flex">
                <div class="field-container">
                    <div class="field-input-container">
                        <div class="field-label accent">Username</div>
                        <div class="field-input">
                            <input class="field-input-element" type="text" name="username" />
                        </div>
                    </div>
                    <div class="field-help">Your username is always lowercase.</div>
                </div>
            </div>
            <div class="form-flex">
                <div class="field-container" style="height: 110px">
                    <div class="field-input-container">
                        <div class="field-label accent">Password</div>
                        <div class="field-input">
                            <input class="field-input-element" type="password" name="password" />
                        </div>
                    </div>
                    <div class="field-help"></div>
                </div>
            </div>
        </div>
        <div class="form-button-container">
    <div class="form-error"></div>
    <div class="form-message"></div>
    <input type="submit" name="submit" value="Accept" class="button form-button"/>
    </div>
    </form>
</div>
{% endblock %}

在我的基地(base.html)

<body>
    <div id="modal-container">
        <div id="modal-overlay">
            <div id="modal-items">
            </div>
        </div>
    </div>
    <div id="wrapper">
        <header>
            <div id="header-title" class="text accent">App name</div>
            <div id="header-nav">
                <nav>
                    {% if user.is_authenticated %}
                    <a href="/" class="text accent">Home</a>
                    <a href="/feed" class="text accent">Feed</a> {% if request.user.is_superuser %}
                    <a href="/admin" class="text accent">Admin</a> {% endif %}
                    <a href="" class="text">N</a>
                    <a href="/{{ request.user }}" class="header-avatar-small-a">
                        <div class="text header-greeting">Hi, {{ user.userprofile.display_name }}</div>
                        <div class="header-avatar-small">
                            {% if not user.userprofile.avatar == '' %}
                            <img src="{{ MEDIA_URL }}users/{{ user }}/avatar" alt=""> {% else %}
                            <img src="{{ MEDIA_URL }}users/avatar" alt=""> {% endif %}
                        </div>
                    </a>
                    {% else %}
                    <a href="/login" class="text accent">Log in</a>
                    <a href="/register" class="text accent">Create account</a> {% endif %}
                </nav>
            </div>
            <div class="progress">
                <div id="header-progress" class="fill"></div>
            </div>
        </header>
        <main>
            {% block content %} {% endblock %}
        </main>
        <footer></footer>
    </div>
</body>
</html>

【问题讨论】:

  • 您是否在模板中使用 {% block content %} 定义了一个名为 content 的块?
  • 当然。在我的 base.html 和我试图从中获取的模板中。

标签: ajax django


【解决方案1】:

模板源是模板的实际 HTML,而不是文件引用

【讨论】:

  • 啊,我明白了。我不会将整个 html 粘贴到函数中,但是,最有效的处理方法是什么?试着在这里干。
  • 只将您需要的元素拆分成另一个html,将此代码传递给函数,并在模板中使用include
  • 如果 html 是动态的(即基于模型的变量)怎么办
  • 有解决方案,比如渲染这些部分模板,然后传递渲染的代码。但要小心,否则你会去构建另一个框架的兔子洞。这是 django 面临的同一个问题:块、模板、动态模板等。
  • 我明白了,我真的只是想让我的应用程序单页,所以我认为这对 django 来说不会太难。如果没有更简单的方法,我将不得不先查找如何渲染部分然后传递代码,也许?我的目标是,由于该网站是基于音频的,因此必须有一种方法可以让您在导航时不停止播放音频。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2021-02-26
  • 2014-04-04
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多