在django中创建搜索栏



我试图在django中制作一个搜索栏,并观看了几个youtube的软文,但没有一个工作。我想做的是要么做一个搜索栏,重定向到文章/what_you_searched_for或如果不可能显示结果,包括搜索。如果有人有足够的时间,他们可以告诉我如何做到这两点:)。在views.py:

def index(request):
queryset = article.objects.all()
number_of_records = article.objects.count()
random_page = random.randint(1,number_of_records)
context = {
"object_list": queryset,
"random_page": random_page
}
#    query = ""
#    if request.GET:
#        query = request.GET['q']
#        context['query'] = str(query)

entries = util.list_entries()
return render(request, "encyclopedia/index.html", context)
#{
#"entries": util.list_entries(),
#"random_page": random_page,
#})
def dynamic_articles_view(request, my_id):
obj = article.objects.get(id= my_id)
number_of_records = article.objects.count()
random_page = random.randint(1,number_of_records)
context = {
"object": obj,
"random_page": random_page
}
return render(request, "encyclopedia/article_detail.html", context)

在index . html:

{% extends "encyclopedia/layout.html" %}
{% block title %}
Encyclopedia
{% endblock %}
{% block body %}
<h1 id="demo" onclick="add_article()">Article</h1>

<ul>
{% for instance in object_list %}
<li><a href = "http://127.0.0.1:8000/articles/{{instance.id}}/">{{instance.title}}</a></li>
{% endfor %}
</ul>
{% endblock %}

layout.html : ------------ 在这里搜索栏 ---------

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link href="{% static 'encyclopedia/styles.css' %}" rel="stylesheet">
</head>
<body>
<div class="row">
<div class="sidebar col-lg-2 col-md-3">
<h2>Wiki</h2>
<form action = "/articles/{{q}}">                         __________EXACTLY HERE ________
<input class="search" type="text" name="q" placeholder="Search...">
</form>
<div>
<a href="{% url 'index' %}">Home</a>
</div>
<div>
<a href = "/new_article" >Create New Article</a>
</div>
<div>
<a href = "http://127.0.0.1:8000/articles/{{random_page}}">Random Page</a>
</div>
{% block nav %}
{% endblock %}
</div>
<div class="main col-lg-10 col-md-9">
{% block body %}
{% endblock %}
</div>
</div>
</body>
</html>

网址:

from django.contrib import admin
from django.urls import include, path
from encyclopedia import views
from encyclopedia.views import index, new_article, dynamic_articles_view
urlpatterns = [
path('admin/', admin.site.urls),
path('', include("encyclopedia.urls")),
path('new_article/', new_article),
path('home/', index, name = 'home'),
path('articles/<int:my_id>/', dynamic_articles_view, name = 'articless')
]

百科全书网址(其他文件夹):

from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
path("", views.new_article, name="new_article")
]

如果需要,我将注释模型和表单,但我不想让我的问题太长。

最简单的方法是在模板中添加一个带有search输入的GETform,而不需要设置表单的动作:

<form action="">
<input type="text" name="search" placeholder="Search by title" value="{{request.GET.title}}">
<input type="submit" value="Search">
</form>

则在views.py中得到该值。如果它是给定的,则按它进行过滤:

def dynamic_articles_view(request):
context['object_list'] = article.objects.filter(title__icontains=request.GET.get('search'))
return render(request, "encyclopedia/article_detail.html", context)

最新更新