Django:如何在另一个模板中包含一个视图

时间:2017-05-29 19:13:26

标签: django-templates

我正在使用第三方Django软件包管理我的头像上传并在我的网站上显示。该程序包要求上传视图显示在新窗口中,并在urls.py中的Django中正常配置,如下所示:

 url(r'^avatar/', include('avatar.urls')),

因此,当我访问 mysite.com/avatar/add.html 时,我会看到用于上传头像的添加视图。

我想要做的是在主视图中创建一个模态窗口,将窗口上传视图(add.html)加载到同一个视图中。我通过以下方式实现了这一目标:

{% include 'avatar/add.html' %}

但是我意识到它显示除上传表单之外的所有内容,因为django没有机会运行与此模板关联的第三个头像视图代码以在呈现之前注入上下文,就像我访问时一样它作为一个URL。

我的问题是:是否有可能内联第三方视图Django以便它处理它并在渲染时注入我自己的视图/模板,仍然尊重第三方视图中的GET / POST逻辑?

我可以完全访问第三方视图代码(这是一个视图功能,我使用的是基于类的视图),但是天堂禁止我复制并将代码粘贴到我自己的代码中,这违背了目的。

提前致谢

1 个答案:

答案 0 :(得分:2)

好的,我刚好解决了这个问题:

在我的views.py类中,我导入了我想在视图中内联的第三方视图

views.py

from avatar import views as avatar_view

然后在我基于类的视图的get()方法中

def get(self, request, *args, **kwargs):
    user =  CreativeUserProfile.objects.get(id = request.user.id)

    /*
       Get Django to parse the 3rd party view and capture it's HttpResponse.
       add() is a view function which specifies it's own template:
       avatars/add.html and injects it's form into it
     */
    avatar_html = avatar_view.add(request).getvalue()

    /* Push the resulting html into my template's own context */
    return render(request, self.template_name, {'user':user,
                                                'avatar_html': avatar_html})

现在在我的模板文件中,我只是这样做

profile.html

 <!--  Avatar popup window -->
 <div class="modal">
    <div class="avatar-modal">
        <span class="avatar-close-btn">&times;</span>
        {{ avatar_html|safe }}
    </div>
 </div>

现在我获得了第三方头像渲染的html,表格效果非常好!

如果有人能看到任何潜在的陷阱,我会谦卑地感谢你的专家评论。

非常感谢并希望这有助于其他人