Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django+;jQuery:有时是AJAX,但总是干的?_Jquery_Ajax_Django_Dry - Fatal编程技术网

Django+;jQuery:有时是AJAX,但总是干的?

Django+;jQuery:有时是AJAX,但总是干的?,jquery,ajax,django,dry,Jquery,Ajax,Django,Dry,假设我有一个应用程序(在Django中),我希望有时(但不总是)通过ajax加载内容 一个简单的例子是登录。当用户登录时,我不想刷新页面,只想更改周围的内容 但是,如果他们已经登录,然后到达(或刷新)同一页面,我希望它显示相同的内容 因此,在第一种情况下,显然我进行了某种ajax登录,并相应地加载对页面的更改。很简单 但是在第二种情况下呢?我是否返回并在整个位置添加{%if user.authenticated%}?这看起来又冷又黑又湿 另一方面,我可以将所有ajaxy内容封装在一个名为logg

假设我有一个应用程序(在Django中),我希望有时(但不总是)通过ajax加载内容

一个简单的例子是登录。当用户登录时,我不想刷新页面,只想更改周围的内容

但是,如果他们已经登录,然后到达(或刷新)同一页面,我希望它显示相同的内容

因此,在第一种情况下,显然我进行了某种ajax登录,并相应地加载对页面的更改。很简单

但是在第二种情况下呢?我是否返回并在整个位置添加{%if user.authenticated%}?这看起来又冷又黑又湿

另一方面,我可以将所有ajaxy内容封装在一个名为loggedIn()的javascript函数中,并在用户经过身份验证后运行该函数。但是我面临的是两个http请求,而不是一个。也不可取


那么这里的标准解决方案是什么呢?

我同意你的第二个选择。是的,这两个HTTP请求会带来一些开销,但由于这两个请求都将检索页面的一部分,因此不会两次加载相同的数据。这与在页面中引用图像文件或javascript库没有太大区别(它们也作为单独的请求加载)


除非您对登录用户和匿名用户有不同的信息集,并且您不希望加载anon信息,然后用登录的信息替换它。在这种情况下,加载主页中的共享元素,并始终通过Ajax加载可变部分(不同的数据取决于匿名用户或登录用户)。

如果它们没有显著差异,我将使用选项1,如果存在显著差异,我想我会发现为两种不同的条件维护两个模板更容易。如果大块是相同的,你总是可以使用include。

这里有一个不同于我的另一个答案的方法。如果您不喜欢模板中的If条件,我建议使用模板继承。例如,您可以使用双模板方法,并根据
用户在视图中呈现一个或另一个。是否已验证

为未经身份验证的用户(例如main_unauthenticated.html)提供页面的基本模板。将所有可变零件放入块中:

{% block userinfo %}You are not logged in yet{% endblock %}
制作一个从该模板继承的main_authenticated.html模板:

{% extends "main_unauthenticated.html" %}
并提供可变块:

{% block userinfo %}Welcome {{ request.user }}{% endblock %}

一般来说,模板继承比包含更强大。

这非常有趣;也许是个赢家。让我来处理一下。