为了理解Django应用程序应该如何正确构建,我有点挣扎。特别是,我很难理解这些观点。
所以我有这个文件
base.html
我知道这个文件将包含整个应用程序的常用元素,如页脚,导航栏,头等。
到目前为止一切顺利。
在我的base.html
文件中,我将获得标记:
{% block content %}
{% endblock %}
它处理应用程序的动态内容。
现在我创建一个名为home.html
的静态页面,并在该文件中放入
{% extends 'base.html' %}
... Whatever I want
{% block content %}
现在,我真的很难理解它是如何工作的。
我创建了一个名为dashboard
的新应用。我创建了一个dashboard.html
文件,与home.html
类似,我扩展了content block
内的基础和元素。在我生成的应用程序的views.py
中定义:
@login_required(login_url="login/")
def dashboard(request):
return render(request, "dashboard.html")
和dashboard.html
{% extends 'base.html' %}
{% block content %}
<div class="dashboard-page">
<div class="row equal-sides">
<div class="col-sm-2 trim-right">
{% include 'dashboard_navigation.html' %}
</div>
<div class="col-sm-10 trim-left">
<div class="dashboard-main card">
<h3>Welcome to your dashboard</h3>
</div>
</div>
</div>
</div>
{% endblock %}
快乐的日子。现在我想重新加载右侧的主容器,具体取决于左侧导航栏的选择。我如何实现这一目标?
我认为如果我要在我的网址文件中添加一个新网址,并在views.py
文件中添加一个相应的视图就可以了。
def single_search(request):
tweets = get_tweets()
context = {'tweets': tweets}
return render(request, "search.html", context)
urls.py
url(r'^dashboard', views.dashboard, name='dashboard'),
url(r'^dashboard/search$', views.single_search, name='search'),
我设法绕过问题并使用以下代码显示“正确”的内容:
{% extends 'base.html' %} {% block content %}
<div class="dashboard-page">
<div class="row equal-sides">
<div class="col-sm-2 trim-right">
{% include 'dashboard_navigation.html' %}
</div>
<div class="col-sm-10 trim-left">
<div class="dashboard-main card">
{% if 'search' in request.path %}
{% include 'search.html' %}
{% else %}
<h3>Welcome to your dashboard</h3>
{% endif %}
</div>
</div>
</div>
</div> {% endblock %}
但我知道这不是正确的做法。我也知道我传递的上下文没有返回,因为它在include 'search.html'
标记内。如果我在信息中心内传递了相同的上下文,那么它在search.html
和dashboard.html
中都有用,不幸的是,如果用户位于search.html
子页面上,我只想查看该内容。
此外,我附上了我的申请表:
答案 0 :(得分:2)
问题只是您没有终止仪表板网址模式,因此它与两个网址都匹配。它应该是:
url(r'^dashboard$', views.dashboard, name='dashboard'),
如果您发现正则表达式令人困惑,Django 2.0中的新path
语法可能会更容易。