Нет CSS и JS, когда косая черта в конце

Views.py

@app.errorhandler(404, strict_slashes=False)
def page_not_found(e):
    return render_template('404.html', e=e)

404.html

{% extends 'layouts/layout1.html' %}

{% block title %}404 Page Not Found
{% endblock title %}

{% block content %}
    <div class="container" >
        <h3>Page you are looking for does not exist: {{ e }}</h3>
    </div>
{% endblock %}

layout1.html

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>{% block title %}

    {% endblock %}</title>

    <!-- Bootstrap Core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="css/small-business.css" rel="stylesheet">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

</head>

<body>

    <!-- Navigation -->
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
        <div class="container">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">
                    <img src="http://placehold.it/150x50&text=Logo" alt="">
                </a>
            </div>
            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="/">About</a>
                    </li>
                    <li>
                        <a href="#">Services</a>
                    </li>
                    <li>
                        <a href="#">Contact</a>
                    </li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
        <!-- /.container -->
    </nav>


    <!-- this is the data with the instruments, I applied on the top of hte website. -->

    <div class="container" >

      <!-- Nav tabs -->
      <ul class="nav nav-tabs" role="tablist">
        <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a></li>
        <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a></li>
        <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a></li>
      </ul>

      <!-- Tab panes -->
      <div class="tab-content">
          <div role="tabpanel" class="tab-pane fade in active" id="home">
              <ul>
                  <li><a href="/register">register</a></li>
                  <li><a href="/admin">admin</a></li>
                  <li><a href="/categories">Categories</a></li>
                  <li>much more crap here</li>
              </ul>
          </div>
          <div role="tabpanel" class="tab-pane fade" id="profile">
              TAB2
          </div>
          <div role="tabpanel" class="tab-pane fade" id="messages">
              Tab 3
          </div>
      </div>

    </div>

{% block content %}
{% endblock %}


    <div class="container">
    <!-- Footer -->
        <footer>
            <div class="row">
                <div class="col-lg-8">
                    <p>Copyright</p>
                </div>
            </div>
        </footer>
    </div>

    <!-- jQuery -->
    <script src="js/jquery.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script src="js/bootstrap.min.js"></script>

</body>

</html>

Когда я иду в

http://127.0.0.1:5000/any_url_not_routed как показано ниже,

это возвращает 404 error как и ожидалось, но когда я ставлю косую черту в конце,

http://127.0.0.1:5000/any_url_not_routed/ как показано ниже,

он отображает ту же страницу, но без CSS и JS. То же самое происходит и с другими страницами, такими как /register, /login и т. Д. Кроме того, браузеры ставят в конце автоматический слеш

Пожалуйста, скажите мне, что происходит? Я могу связать больше кода здесь.

1 ответ

Решение

Ваш "css/bootstrap.min.css" результаты в "/css/bootstrap.min.css" когда завершающий слеш отсутствует и "/any_url_not_routed/css/bootstrap.min.css" когда присутствует косая черта.

Вы должны использовать абсолютный путь "/css/bootstrap.min.css" для ссылки на ресурсы, как вы уже делаете для таких действий, как "/register",

Вы можете проверить истинность этого, просмотрев журналы запросов вашего сервера.

Другие вопросы по тегам