在更改了BASE_DIR在Django中的位置之后,为什么页面的模板块没有加载?

2024-04-23 23:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在遵循this的建议,它似乎破坏了我的模板加载。你知道吗

'中的目录声明'设置.py':

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'gantt_charts\\templates\\gantt_charts')]
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),
                    ]

你知道吗视图.py对于我的应用程序:

def project_list(request):
    projects = Project.objects.filter(tasks__isnull=False).order_by('updated_date').distinct()
    return render(request, 'project_list.html', {'projects':projects})

def project_detail(request,project_id):
    projects = get_object_or_404(Project,pk=project_id)
    return render(request,'project_detail.html',{'projects':projects})

我的应用程序网址.py你知道吗

urlpatterns = patterns('',
    url(r'^(?:project)?/?$', views.project_list),
    url(r'^project/(?P<project_id>\d+)/\w{0,50}',views.project_detail),
)

我的项目_列表.html(位于gantt_charts\\templates\\gantt_charts内):

{% extends 'base.html'%}
{% block content %}
{% load humanize %}
{% load staticfiles %}
    {% for project in projects|slice:":3"%}
        <div class="project">
            <h3>
                <a href="project/{{project.id}}/{{project.slug}}" title="Created {{project.created_date|naturaltime}}">{{project.title}}</a>
            </h3>
            <ul>
                {% for task in project.tasks.all|slice:":3" %}
                <li>{{task.title}}</li>
                {% empty %}
                <li>No tasks in this project</li>
                {% endfor %}
            </ul>
        </div>
    {% endfor %}
{% endblock content %}

还有我的基本.html模板(位于templates):

{% load humanize %}
{% load staticfiles %}
<html>
    <head>
    <!-- external includes -->
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>

    <!-- local includes -->
        <link rel="stylesheet" href="{% static 'css/site.css' %}">
        <title>gAnttlr - Gantt charts</title>
    </head>
    <body>
        <div class="page-header fixed-div">
            <h1>gAnttlr</h1> 
            <img src ="{%static 'svg/antler3.svg'%}" class="antler-icon fit-div" alt="Medium sized antler">
        </div>
        </div>
        <div class="content container">
            <div class="row">
                <div class="col-md-8">
                    {% block content %}
                    {% endblock %}
                </div>
            </div>
        </div>
        <div class="push"></div>
        <div id="footer" class="muted">
            <p>
                gAnttlr logo derived from 'Vectorised' by Yug (Nordisk familjebok (1911), vol.15, p.19 [1]) [Public domain], <a href="http://commons.wikimedia.org/wiki/File%3AKronhjortshornets_utveckling%2C_Nordisk_familjebok.svg">via Wikimedia Commons</a>
            </p>
        </div>
    </body>
</html>

以下是我认为应该发生的事情:

  1. 当我转到指定为r'^(?:project)?/?$(或者localhost/或者localhost/project)的url时
    1. 发现它想查views.project_list然后去那里
  2. 看到它想要呈现project_list.html,在模板目录上查找,然后找到它。你知道吗
  3. project_list.html看到它需要涉及base.html,在模板目录上查找,并找到它。你知道吗
  4. 将两个html文件缝合在一起,填写数据库查询中的其他变量,然后加载。你知道吗

我得到的只是基本.html佩奇,没别的。我不明白为什么会这样。我所能想到的就是它试图在'templates'目录中找到project_list.html,而不是找到它然后放弃。有趣的是,如果我将base的位置指定为除'base.html'(比如在dir前面加上前缀)之外的任何内容,那么它会抛出一个错误,并且不会呈现任何内容。你知道吗

为什么django不加载project_list.html来代替{% block content %}{% endblock %}元标记?你知道吗


Tags: pathdivprojectidoshtmlcontentbootstrap
1条回答
网友
1楼 · 发布于 2024-04-23 23:23:21

我遵循的建议是改变我的BASE_DIR指向的位置,这也产生了一种不幸的效果,即告诉django我的db也移动了,因为它是相对于BASE_DIR放置的。你知道吗

我已经修复了这个问题,并使它成为一个常数,与我的其他*\u DIR变量位于同一位置,这样我就可以跟踪它的变化。你知道吗

我还向for循环添加了一个{% empty %}块,以在将来提醒我这一点。你知道吗

相关问题 更多 >