从ajax获取模板块内容和调用
我正在使用django 1.9和python 3。我的英语也不是最好的,所以请原谅这个问题,如果它是坏的 我正在努力使我的网站成为一个单页应用程序。我需要获取给定模板的从ajax获取模板块内容和调用,ajax,django,Ajax,Django,我正在使用django 1.9和python 3。我的英语也不是最好的,所以请原谅这个问题,如果它是坏的 我正在努力使我的网站成为一个单页应用程序。我需要获取给定模板的{%block%}内容,然后将其作为HttpResponse发送,以便ajax能够获取它并将其注入页面 我试着使用这个问题的答案: 但在我看来,当试图获取块的内容时,如下所示: response_data[content] = get_block_source('profile/login.html', 'content')
{%block%}
内容,然后将其作为HttpResponse发送,以便ajax能够获取它并将其注入页面
我试着使用这个问题的答案:
但在我看来,当试图获取块的内容时,如下所示:
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那里得到这个错误,不管我做什么:
找不到/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 %}
{%extends'base.html%}
{%block content%}
登录
{%csrf_令牌%}
输入您的凭据
用户名
您的用户名始终为小写。
密码
{%endblock%}
在my base(base.html)中
应用程序名称
{%if user.u经过身份验证%}
{%if request.user.is_superuser%}
{%endif%}
{%else%}
{%endif%}
{%block content%}{%endblock%}
模板源是模板的实际HTML,而不是文件引用模板源是模板的实际HTML,而不是文件引用您是否在模板中定义了一个名为content的块,其中包含{%block content%}?当然。在my base.html和我试图从中获取的模板中。您是否在模板中使用{%block content%}定义了一个名为content的块?当然。在我的base.html和我试图从中获取的模板中。啊,我明白了。我不会将整个html粘贴到函数中,但是,处理这个问题的最有效方法是什么?尝试在这里保持干燥。只将您需要的元素拆分为另一个html,将此代码传递给函数,并在模板中使用include。如果html是动态的(即基于模型的变量),则有解决方案,如呈现这些部分模板,然后传递呈现的代码。但是要小心,否则你将进入构建另一个框架的兔子洞。django也面临同样的问题:块、模板、动态模板等等。我明白了,我真的只想让我的应用程序成为一个页面,所以我想这对django来说不会太难。如果没有更简单的方法,我必须先查找如何渲染部分,然后传递代码,也许?我的目标是,因为这个网站是基于音频的,所以当你导航时,必须有一种方式让音频不停止播放。啊,我明白了。我不会将整个html粘贴到函数中,但是,处理这个问题的最有效方法是什么?尝试在这里保持干燥。只将您需要的元素拆分为另一个html,将此代码传递给函数,并在模板中使用include。如果html是动态的(即基于模型的变量),则有解决方案,如呈现这些部分模板,然后传递呈现的代码。但是要小心,否则你将进入构建另一个框架的兔子洞。django也面临同样的问题:块、模板、动态模板等等。我明白了,我真的只想让我的应用程序成为一个页面,所以我想这对django来说不会太难。如果没有更简单的方法,我必须先查找如何渲染部分,然后传递代码,也许?我的目标是,因为这个网站是基于音频的,必须有一种方式,让音频不停止播放,当你导航。
<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>