Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Python 在Django中将不同的模板呈现为相同的URL模式_Python_Django - Fatal编程技术网

Python 在Django中将不同的模板呈现为相同的URL模式

Python 在Django中将不同的模板呈现为相同的URL模式,python,django,Python,Django,我的问题与类似,但我不是基于用户身份验证来呈现模板,而是基于浏览器中启用或禁用的JavaScript 我想做什么 如果浏览器中启用了JavaScript,我将尝试呈现index.html页面;否则,如果禁用了jsDisabled.html页面,我将呈现jsDisabled.html页面,并且两个页面应呈现在相同的URL模式上,例如: 如果浏览器中启用了JavaScript,则localhost:8000应呈现index.html;如果禁用了JavaScript,则应呈现jsDisabled.ht

我的问题与类似,但我不是基于用户身份验证来呈现模板,而是基于浏览器中启用或禁用的JavaScript

我想做什么

如果浏览器中启用了JavaScript,我将尝试呈现index.html页面;否则,如果禁用了jsDisabled.html页面,我将呈现jsDisabled.html页面,并且两个页面应呈现在相同的URL模式上,例如:

如果浏览器中启用了JavaScript,则localhost:8000应呈现index.html;如果禁用了JavaScript,则应呈现jsDisabled.html页面

注意:我正在使用禁用JavaScript时将运行的标记检查浏览器中是否禁用了JavaScript

以下是我目前的代码:

base.html:


根据您的Django版本,您可能需要在较新版本的settings.py中指定TEMPLATE_DIR=,这不是必需的

以下是一些关于模板和标记逻辑的有用信息:

Main/templates/myapp/base.html
Main/templates/myapp/index.html
Main/templates/myapp/includes/yes_js.html
Main/templates/myapp/includes/no_js.html
base.html: index.html:
经过大量调试,我终于找到了解决方案:如下:

base.html: views.py:
我将内置模板标记作为{%include'includes/jsDisabled.html%}包括在内,建议在模板文件夹中创建一个名为includes的文件夹,并将jsDisabled.html放在其中。

您如何知道js已禁用?浏览器不会马上宣布这一事实。标签会告诉你的。看看我的base.html代码。@user3012759你知道答案吗,先生,妈妈,不管你的答案是什么:?首先非常感谢你的答案,其次是什么输出?我不需要在这里检查条件,因为这意味着js被禁用,在这种情况下,我只需要在这里包含一个jsDisabled.html页面。这是假设您的测试逻辑的伪代码。我认为您不希望同时包含no_js和yes_js,您仍然需要运行测试用例,但这允许您在前端运行逻辑,并且只包含所需的html。更新的解决方案。如果没有测试用例,只需包含no_js.html。yes_js仍将呈现,因此我建议使用一些测试用例。{%include'jsDisabled.html%}抛出一个错误,我在文档中看到了,但没有得到它。我想在我的base.html中呈现jsDisabled.html,因为我的base.html包含显示页面页眉和页脚的代码,这需要javascript。如果我尝试在index.html中显示jsDisabled.html,它也会显示页眉和页脚,这是我不想要的。很高兴你能理解。Django是一个很棒的平台。我总是很高兴看到人们在项目和生产级应用中使用它。一定要在回答的问题上做记号
from django.conf.urls import include, url
from django.contrib import admin
from . import views

urlpatterns = [
  ...
  url(r'^(?P<flag>[0-1])$', views.index, name='index'),
]
from django.shortcuts import render

def index(request, flag):
    if (flag):
       return render(request, 'jsDisabled.html')
    else:
       return render(request, 'index.html')
Main/templates/myapp/base.html
Main/templates/myapp/index.html
Main/templates/myapp/includes/yes_js.html
Main/templates/myapp/includes/no_js.html
{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
{% extends 'myapp/base.html' %}
{% load staticfiles %}

{% block content %}
<noscript>
{% include 'no_js.html' %}
</noscript>

{% include 'yes_js.html' %}

{% endblock %}
{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>
</head>
<body>
 <div class="noJs">
    ...
    <a href="{% url 'index' 0 %}"> abc </a>
    ...
 </div>
 <noscript>
    <style type="text/css">
        .noJs {

            display: none;
       }
    </style>
    {% include 'includes/jsDisabled.html' %}
</noscript>
</body>
</html>
from django.conf.urls import include, url
from django.contrib import admin
from . import views

urlpatterns = [

   url(r'^admin/', admin.site.urls),
   url(r'^articles/', include('articles.urls')),
   url(r'^contact/', include('contact.urls')),
   url(r'^temp/',views.temp, name="temp"),
   url(r'^$', views.index, name='index'),
]
from django.shortcuts import render

def index(request):
    return render(request,'index.html')

def temp(request):
     return render(request,'temp.html')