Django поиск не генерируется html страница, которую я установил - PullRequest
0 голосов
/ 27 апреля 2020

У меня проблемы с получением формы поиска для работы в Django. Когда я что-то ищу в строке поиска, которую я установил, я получаю страницу html, на которой просто есть слова Search. Это не страница html, которую я установил. Мой шаблон поиска находится в каталоге моих проектов templates. Я пытаюсь выполнить поиск по сообщениям в своем блоге и приложил код своих просмотров и URL-адресов.

Эта часть моего базового шаблона находится в пределах navbar, который я извлек из образца Bootstrap блога. Это образец шаблона. Я изменил некоторые вещи в своей форме.

base.html

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.css" rel="stylesheet"  type='text/css'>
{% load static %}

<!-- Navbar here -->
<nav class="navbar navbar-expand-lg navbar-dark fixed-top bg-dark">
    <a class="navbar-brand" href="{% url 'index' %}">ChairBlog</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

    <div class="collapse navbar-collapse">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item">
            <a class="nav-link {% if request.resolver_match.view_name == 'index' %}active{% endif %}" href="{% url 'index' %}">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link {% if request.resolver_match.view_name == 'project_index' %}active{% endif %}" href="{% url 'project_index' %}">Projects </a>
          </li>
          <li class="nav-item">
            <a class="nav-link {% if request.resolver_match.view_name == 'blog_index' %}active{% endif %}" href="{% url 'blog_index' %}">Blog </a>
          </li>
        </ul>
        <form class="form-inline my-2 my-lg-0" action="{% url 'search' %}" method="GET"> 
          <input class="form-control mr-sm-2" type="search" name="q" placeholder="Search blog posts...">
          <button class="btn my-2 my-sm-0" type="submit">Search</button>
        </form>
    </div>
</nav>

<!-- Jumbotron stuff here -->
<div class="jumbotron d-flex align-items-center" style="margin-top: 56px;">
  <div class="container text-center">
    {% block jumbo_content %}

    {% endblock %}
  </div>
</div>

<!-- Main content goes here -->
<div class="container" style="padding-bottom: 200px;">
    {% block page_content %}{% endblock %}
</div>

<!-- Footere here -->
<footer style="position: relative;">
  <div class= "page-footer bg-dark" style="padding-top: 20px; margin-top: 50px;">
      <div class="container" style="display: flex; justify-content: center;">
        <div class= "row">
          <div class="mb-10 flex-center">
            <a class="github" href="https://github.com/ChairMane"><i class="fa fa-github-square fa-2x"></i></a>
          </div>
        </div>
      </div>
      <div class="footer-copyright text-center py-3" style="color: white;">Chair Birds Co.</div>
  </div>  
</footer>



<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>

Ничего в моих блоках не отображается, когда я его просматриваю , Теги <p>TEST</p> и <p>Is this working?</p> не отображаются. Также нет блока для jumbo_content. Я правильно установил их в своей базе. html, потому что они работают с другими моими страницами. Это просто страница поиска, на которой он не работает.

search.html

{% extends "base.html" %}
{% load static %}

{% block jumbo_content %}
    <h1 class="display-4">Search Results</h1>
{% endblock %}

{% block page_content %}
<p>TEST</p>
  {% if query %}
      {% if results %}
          <ul>
              {% for post in results %}
                <p>Is this working?</p>
                <li>
                  {{ post.title }}, {{ post.body }}
                </li>
              {% endfor %}
          </ul>
      {% else %}
             <p>Query returned no results.</p>
      {% endif %}
  {% endif %}
{% endblock %}

app/views.py

    ...
def search_posts(request):
    query = request.GET.get('q', '')
    if query:
        queryset = (Q(title__icontains=query) | Q(body__icontains=query))
        results = Post.objects.filter(queryset).distinct()
    else:
        results = []

    context = {
        'results' : results,
        'query' : query
    }
    return render(request, 'search.html', context)
    ...

app/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.blog_index, name='blog_index'),
    path('<int:pk>/', views.blog_detail, name='blog_detail'),
    path('<category>/', views.blog_category, name='blog_category'),
    path('search/', views.search_posts, name='search'),
]

Вот как шаблон search в настоящее время рассматривается, я считаю. Мои проблемы, как показано на рисунке. Инспектор ничего не показывает в блоках, которые я установил. У меня есть jumbo_content и page_content, и все же ничего из того, что я установил в каждом блоке, не показывается. enter image description here

Может кто-нибудь увидеть здесь что-то сразу не так? Я пробовал этот урок , и то же самое происходит.

EDIT Кажется, моя search_posts(request) функция в моих представлениях даже не вызывается, когда Я ищу что-то в панели поиска. Я попытался отследить, и печать, и ничего не обнаружилось в моем терминале. Я не правильно звоню search_posts(request)?

1 Ответ

0 голосов
/ 27 апреля 2020

Я наконец получил свой ответ. Я посмотрел на этот пост и решил что-то попробовать. Очевидно, если я изменю свою строку app/urls.py с этого:

    path('search/', views.search_posts, name='search'),

на это:

    path('search', views.search_posts, name='search'),

, тогда весь мой вид будет работать.

Кто-нибудь может объяснить, почему это так? Я понятия не имел, что удаление / может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...