我想知道这是否可以实现(作为app / middleware):
我安装了django-registration app。然后,我创建了基于站点的应用程序,用于制作一些通用页面视图。我想在首页上添加登录表单和注册表单。所以我进入并修改了/register/login.html和register / register.html模板以适合我的首页设计(html的东西)。然后我转到我的主页index.html文件,然后在我的html中找到我想要那些块(登录和注册)的地方,然后我添加{%load“register / login.html”%}和a {%load“register / register.html”%}。现在,当urlconf调用我的索引视图时,模板将到达LOAD触发器并调用LOGIN视图,以便将所有的form.elements传递给它,并且也为其元素调用REGISTER视图。然后,那些已完成(渲染)的视图将传递到我的index.html并插入到我放置LOAD语句的位置。
目前可以完成上述工作吗?我的目标是将各种应用程序可用并将它们插入到我的项目中,而不会触及任何代码(我想确保以后可以升级单个应用程序而不会破坏我的项目中的任何内容,因为我添加了自定义内容......)
如果目前可以实现上述目标,有人可以提供一些文档/教程/ howtos,以了解重用其他人应用的最佳做法吗?
答案 0 :(得分:0)
肯定有{% include %}
标记,它允许您直接在另一个模板中包含模板。它还获取所包含模板获取的所有内容,因此如果您使用RequestContext,则意味着它可以访问请求变量中的所有内容。
然而,似乎你说你想以某种方式实际调用注册视图和登录视图并将结果嵌入到你的页面中。理论上,这可以通过编写一个自定义标记来实现,该标记使用http GET调用URL,然后从请求中输出生成的HTML。
我不推荐这个。相反,对于首页,请继续创建两个指向django-registration应用程序中相应URL的表单。
答案 1 :(得分:0)
如何简单地修改我正在重新使用的应用程序中的视图,以包含一个额外的参数,以查看它是否被用作SUBVIEW(因此不返回render_to_response()),并检查“FORMNAME”中的“FORMNAME” request.POST数据。然后,如果SUBVIEW(我正在重新使用的应用程序的视图)在request.POST中找到它的“FORMNAME”,它将处理该表单。如果没有提供request.POST数据,它将返回包含所有表单元素而不是render_to_response()的字典。然后我可以在我的视图中为首页调用该函数,并将返回的值字典传递给我的模板以及任何其他组件。在提交时,将调用该函数,如果它在request.POST数据中找到“表单名称”(这个“表单名称”可以在隐藏字段中,它将处理该表单,否则它将返回表单元素的字典,下一个函数将在我的视图中调用,这可能与django.contrib.django-registration.register()视图有关。这将产生ULTIMATE RE-USABILITY!
这样我也可以访问form.errors !!
我的观点:
def index(request):
login = django.contrib.register.login(request, ... , Subview=True)
register = django.contrib.register.register(request, ... , Subview=True)
return render_to_response('index.html', {'login_form': login, 'register_form': register})
或者,我可以分叉每个应用程序并对其进行修改...这会使将应用程序重新用作独立维护的程序包的目的失败,而更像是复杂的代码粘贴。