【问题标题】:Displaying two views simultaneously同时显示两个视图
【发布时间】:2014-02-01 20:17:35
【问题描述】:

我试图在同一页面上同时显示两个不同的视图。如果我注释掉 user_creation url,则将显示 userlist 视图。否则,如果两个 url 都未注释,则首先列出的 url 将指示哪个视图可见(在本例中为 user_creation)。

如何在同一页面上同时显示两个视图?

(PS:我是 Django 初学者)

编辑:由于我不能有两种观点,我将描述我的目标。我正在尝试显示:

  1. 用户可以输入信息以创建用户的表单,并且
  2. 已创建的用户列表。随着使用表单输入创建新用户,用户列表(显示在某处,并不真正关心其视觉布局的位置或方式)将更新以显示所有用户,包括新创建的用户。

同样,我显示的代码分别适用于每个目的,但我不能同时显示两个部分/模块。

urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
  url(r'^$', 'users.views.user_creation', name='user_creation'),  
  url(r'^$', 'users.views.userlist', name='userlist'),
  url(r'^admin/', include(admin.site.urls)),
)

views.py

from django.shortcuts import render_to_response, RequestContext
from django.http import HttpResponseRedirect
from users.models import User
from users.forms import UserForm

def user_creation(request):
  form = UserForm(request.POST or None)

  if form.is_valid():
    save_it = form.save(commit=False)
    save_it.save()
    return HttpResponseRedirect('/')

  return render_to_response("users/base.html",
                            locals(),
                            context_instance=RequestContext(request))

def userlist(request):
  return render_to_response("users/userlist.html",
                           {'users': User.objects.all()})

base.html

<html>
  <body>
    <h1>User Management</h1><br>

    <form method='POST' action=''> {% csrf_token %}
      {{ form.as_p }}
      <input type='submit' value="Create">
    </form>

    <!--userlist.html block-->
    {% block userlist_block %}
    {% endblock %}

  </body>
</html>

userlist.html

{% extends "users/base.html" %}

{% block userlist_block %}
  {% for user in users %}
    {{ user.name_first }} {{ ' ' }}
    {{ user.name_last }} {{ '; ' }}
    {{ user.email_1 }}</li>
  {% endfor %}
{% endblock %}

【问题讨论】:

  • 不能同时显示两个视图。
  • 你不能那样做。但是您可以编写一个视图并决定要使用哪个上下文渲染哪个模板。告诉我们你到底想做什么?
  • @FallenAngel - 查看对 OP 的编辑。

标签: django django-views


【解决方案1】:

您应该能够使用一种称为包含标记的模板标记来实现此目的。 Read about them here.

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多