AttributeError: module 'courses.views' has no attribute 'search'
AttributeError: module 'courses.views' has no attribute 'search'
我是 Django 初学者,正在根据 Youtube 教程在一个教育网站上工作。我的问题是我不知道我的错误在哪里。
原错误:
AttributeError: module 'courses.views' has no attribute 'search'
错误 2(当我在 urls.py 中用 views.search
注释行时出现)
In template
C:\Users\Vusala\Desktop\smartedu_project\smartedu_original\templates\partials_base.html, error at line 0
Reverse for 'search' not found. 'search' is not a valid view function or pattern name.
下面是项目的一些代码。
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.course_list, name="courses"),
path('<slug:category_slug>/<int:course_id>', views.course_detail, name="course_detail"),
path('categories/<slug:category_slug>', views.course_list, name="courses_by_category"),
path('tags/<slug:tag_slug>', views.course_list, name="courses_by_tag"),
#path('search/', views.search, name="search"),
]
views.py
from django.http import HttpResponse
from django.shortcuts import render
from . models import Course, Category, Tag
def course_list(request):
courses = Course.objects.all().order_by('-date')
categories = Category.objects.all()
tags = Tag.objects.all()
context= {
'courses': courses,
'categories': categories,
'tags': tags
}
return render(request, 'courses.html', context)
def course_detail(request,category_slug, course_id):
course = Course.objects.get(category__slug=category_slug, id=course_id)
context = {
'course' : course
}
return render(request, 'course.html', context)
_base.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
...
<title>SmartEDU - Education Responsive HTML5 Template</title>
<link rel="shortcut icon" href="{% static 'images/favicon.ico' %}" type="image/x-icon" />
<link rel="apple-touch-icon" href="{% static 'images/apple-touch-icon.png' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'style.css' %}">
...
</head>
<body class="host_version">
<div id="preloader">
<div class="loader-container">
<div class="progress-br float shadow">
<div class="progress__item"></div>
</div>
</div>
</div>
{% include 'partials/_navbar.html' %}
{% block content %}
{% endblock %}
{% include 'partials/_footer.html' %}
_navbar.html
{% load static %}
<header class="top-navbar">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{% url 'index' %}">
<img src="{% static 'images/logo.png' %}" alt="" />
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbars-host" aria-controls="navbars-rs-food" aria-expanded="false" aria-label="Toggle navigation">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse" id="navbars-host">
<ul class="navbar-nav ml-auto">
<li class="nav-item {% if '/' == request.path %} active {% endif %} "><a class="nav-link" href="{% url 'index' %}">Home</a></li>
<li class="nav-item"{% if 'about' in request.path %} active {% endif %} "><a class="nav-link" href="{% url 'about' %}">About Us</a></li>
<li class="nav-item"{% if 'courses' in request.path %} active {% endif %} "><a class="nav-link" href="{% url 'courses' %}">Courses</a></li>
<li class="nav-item"{% if 'teachers' in request.path %} active {% endif %} "><a class="nav-link" href="{% url 'teachers' %}">Teachers</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="hover-btn-new log orange" href="#" data-toggle="modal" data-target="#login"><span>Book Now</span></a></li>
</ul>
</div>
</div>
</nav>
</header>
<!-- End header -->
_footer.html
{% load static %}
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="widget clearfix">
<div class="widget-title">
<h3>About US</h3>
</div>
<p> Integer rutrum ligula eu dignissim laoreet. Pellentesque venenatis nibh sed tellus faucibus bibendum. Sed fermentum est vitae rhoncus molestie. Cum sociis natoque penatibus et magnis dis montes.</p>
<div class="footer-right">
<ul class="footer-links-soi">
<li><a href="#"><i class="fa fa-facebook"></i></a></li>
<li><a href="#"><i class="fa fa-github"></i></a></li>
<li><a href="#"><i class="fa fa-twitter"></i></a></li>
<li><a href="#"><i class="fa fa-dribbble"></i></a></li>
<li><a href="#"><i class="fa fa-pinterest"></i></a></li>
</ul><!-- end links -->
</div>
</div><!-- end clearfix -->
</div><!-- end col -->
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="widget clearfix">
<div class="widget-title">
<h3>Information Link</h3>
</div>
<ul class="footer-links">
<li><a href="#">Home</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Pricing</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul><!-- end links -->
</div><!-- end clearfix -->
</div><!-- end col -->
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="widget clearfix">
<div class="widget-title">
<h3>Contact Details</h3>
</div>
<ul class="footer-links">
<li><a href="mailto:#">info@yoursite.com</a></li>
<li><a href="#">www.yoursite.com</a></li>
<li>PO Box 16122 Collins Street West Victoria 8007 Australia</li>
<li>+61 3 8376 6284</li>
</ul><!-- end links -->
</div><!-- end clearfix -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end container -->
</footer><!-- end footer -->
<div class="copyrights">
<div class="container">
<div class="footer-distributed">
<div class="footer-center">
<p class="footer-company-name">All Rights Reserved. © 2018 <a href="#">SmartEDU</a> Design By : <a href="https://html.design/">html design</a></p>
</div>
</div>
</div><!-- end container -->
</div><!-- end copyrights -->
<a href="#" id="scroll-to-top" class="dmtop global-radius"><i class="fa fa-angle-up"></i></a>
<!-- ALL JS FILES -->
<script src="{% static 'js/all.js' %}"></script>
<!-- ALL PLUGINS -->
<script src="{% static 'js/custom.js' %}"></script>
<script src="{% static 'js/timeline.min.js' %}"></script>
<script>
timeline(document.querySelectorAll('.timeline'), {
forceVerticalMode: 700,
mode: 'horizontal',
verticalStartPosition: 'left',
visibleItems: 4
});
</script>
<script>
$(window).on('load', function() {
$('#logreg').modal('show');
});
</script>
</body>
</html>
courses.html
{% extends 'partials/_base.html' %}
{% load static %}
{% block content %}
<div class="all-title-box">
<div class="container text-center">
<h1>Courses</span></h1>
</div>
</div>
<div id="overviews" class="section wb">
<div class="container">
<div class="row">
<div class="col-lg-9 blog-post-single">
<div class="row">
{% for course in courses %}
<div class="col-lg-6 col-md-6 col-12 mb-4">
<div class="course-item">
<div class="image-blog">
<img src="{{course.image.url}}" alt="" class="img-fluid">
</div>
<div class="course-br">
<div class="course-title">
<h2><a href="{% url 'course_detail' course.category.slug course.id %}" title="">{{course.name}}</a></h2>
</div>
<div class="course-desc">
<p>{{course.description | truncatechars:140}}</p>
</div>
</div>
<div class="course-meta-bot">
<ul>
<li><i class="fa fa-calendar" aria-hidden="true"></i> {{course.date|date:"d M Y"}}</li>
<li><i class="fa fa-book" aria-hidden="true"></i> {{course.teacher}}</li>
</ul>
</div>
</div>
</div><!-- end col -->
{% endfor %}
</div><!-- end row -->
</div><!-- end col -->
<div class="col-lg-3 col-12 right-single">
<div class="widget-search">
<div class="site-search-area">
<form method="get" id="site-searchform" action="{% url 'search' %}">
<div>
<input class="input-text form-control" name="search" placeholder="Search keywords..." type="text">
<input id="searchsubmit" value="Search" type="submit">
</div>
</form>
</div>
</div>
<div class="widget-categories">
<h3 class="widget-title">Categories</h3>
<ul>
{% for category in categories %}
<li><a href="{% url 'courses_by_category' category.slug %}">{{category.name}}</a></li>
{% endfor %}
</ul>
</div>
<div class="widget-tags">
<h3 class="widget-title">Search Tags</h3>
<ul class="tags">
{% for tag in tags %}
<li><a href="{% url 'courses_by_tag' tag.slug %}">{% if tag.slug in request.path %} <b>{{tag.name}}</b>{% else %}{{tag.name}}{% endif %}</a></li>
{% endfor %}
</ul>
</div>
</div>
</div><!-- end row -->
</div><!-- end container -->
</div><!-- end section -->
{% endblock %}
我希望你能帮助我,让我摆脱这种绝望。
错误很明显,它表示在您的视图中没有名为搜索的函数
请考虑添加代码和错误不是它们的 img ..
第二个错误发生在这里
<form method="get" id="site-searchform" action="{% url 'search' %}">
<div>
<input class="input-text form-control" name="search" placeholder="Search keywords..." type="text">
<input id="searchsubmit" value="Search" type="submit">
</div>
</form>
在此表单中 course.html
表单操作设置为 {% url 'seaech '%}
只要删除这个表格,一切都会起作用
我是 Django 初学者,正在根据 Youtube 教程在一个教育网站上工作。我的问题是我不知道我的错误在哪里。
原错误:
AttributeError: module 'courses.views' has no attribute 'search'
错误 2(当我在 urls.py 中用 views.search
注释行时出现)
In template C:\Users\Vusala\Desktop\smartedu_project\smartedu_original\templates\partials_base.html, error at line 0
Reverse for 'search' not found. 'search' is not a valid view function or pattern name.
下面是项目的一些代码。
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.course_list, name="courses"),
path('<slug:category_slug>/<int:course_id>', views.course_detail, name="course_detail"),
path('categories/<slug:category_slug>', views.course_list, name="courses_by_category"),
path('tags/<slug:tag_slug>', views.course_list, name="courses_by_tag"),
#path('search/', views.search, name="search"),
]
views.py
from django.http import HttpResponse
from django.shortcuts import render
from . models import Course, Category, Tag
def course_list(request):
courses = Course.objects.all().order_by('-date')
categories = Category.objects.all()
tags = Tag.objects.all()
context= {
'courses': courses,
'categories': categories,
'tags': tags
}
return render(request, 'courses.html', context)
def course_detail(request,category_slug, course_id):
course = Course.objects.get(category__slug=category_slug, id=course_id)
context = {
'course' : course
}
return render(request, 'course.html', context)
_base.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
...
<title>SmartEDU - Education Responsive HTML5 Template</title>
<link rel="shortcut icon" href="{% static 'images/favicon.ico' %}" type="image/x-icon" />
<link rel="apple-touch-icon" href="{% static 'images/apple-touch-icon.png' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'style.css' %}">
...
</head>
<body class="host_version">
<div id="preloader">
<div class="loader-container">
<div class="progress-br float shadow">
<div class="progress__item"></div>
</div>
</div>
</div>
{% include 'partials/_navbar.html' %}
{% block content %}
{% endblock %}
{% include 'partials/_footer.html' %}
_navbar.html
{% load static %}
<header class="top-navbar">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="{% url 'index' %}">
<img src="{% static 'images/logo.png' %}" alt="" />
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbars-host" aria-controls="navbars-rs-food" aria-expanded="false" aria-label="Toggle navigation">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse" id="navbars-host">
<ul class="navbar-nav ml-auto">
<li class="nav-item {% if '/' == request.path %} active {% endif %} "><a class="nav-link" href="{% url 'index' %}">Home</a></li>
<li class="nav-item"{% if 'about' in request.path %} active {% endif %} "><a class="nav-link" href="{% url 'about' %}">About Us</a></li>
<li class="nav-item"{% if 'courses' in request.path %} active {% endif %} "><a class="nav-link" href="{% url 'courses' %}">Courses</a></li>
<li class="nav-item"{% if 'teachers' in request.path %} active {% endif %} "><a class="nav-link" href="{% url 'teachers' %}">Teachers</a></li>
<li class="nav-item"><a class="nav-link" href="contact.html">Contact</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="hover-btn-new log orange" href="#" data-toggle="modal" data-target="#login"><span>Book Now</span></a></li>
</ul>
</div>
</div>
</nav>
</header>
<!-- End header -->
_footer.html
{% load static %}
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="widget clearfix">
<div class="widget-title">
<h3>About US</h3>
</div>
<p> Integer rutrum ligula eu dignissim laoreet. Pellentesque venenatis nibh sed tellus faucibus bibendum. Sed fermentum est vitae rhoncus molestie. Cum sociis natoque penatibus et magnis dis montes.</p>
<div class="footer-right">
<ul class="footer-links-soi">
<li><a href="#"><i class="fa fa-facebook"></i></a></li>
<li><a href="#"><i class="fa fa-github"></i></a></li>
<li><a href="#"><i class="fa fa-twitter"></i></a></li>
<li><a href="#"><i class="fa fa-dribbble"></i></a></li>
<li><a href="#"><i class="fa fa-pinterest"></i></a></li>
</ul><!-- end links -->
</div>
</div><!-- end clearfix -->
</div><!-- end col -->
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="widget clearfix">
<div class="widget-title">
<h3>Information Link</h3>
</div>
<ul class="footer-links">
<li><a href="#">Home</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Pricing</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul><!-- end links -->
</div><!-- end clearfix -->
</div><!-- end col -->
<div class="col-lg-4 col-md-4 col-xs-12">
<div class="widget clearfix">
<div class="widget-title">
<h3>Contact Details</h3>
</div>
<ul class="footer-links">
<li><a href="mailto:#">info@yoursite.com</a></li>
<li><a href="#">www.yoursite.com</a></li>
<li>PO Box 16122 Collins Street West Victoria 8007 Australia</li>
<li>+61 3 8376 6284</li>
</ul><!-- end links -->
</div><!-- end clearfix -->
</div><!-- end col -->
</div><!-- end row -->
</div><!-- end container -->
</footer><!-- end footer -->
<div class="copyrights">
<div class="container">
<div class="footer-distributed">
<div class="footer-center">
<p class="footer-company-name">All Rights Reserved. © 2018 <a href="#">SmartEDU</a> Design By : <a href="https://html.design/">html design</a></p>
</div>
</div>
</div><!-- end container -->
</div><!-- end copyrights -->
<a href="#" id="scroll-to-top" class="dmtop global-radius"><i class="fa fa-angle-up"></i></a>
<!-- ALL JS FILES -->
<script src="{% static 'js/all.js' %}"></script>
<!-- ALL PLUGINS -->
<script src="{% static 'js/custom.js' %}"></script>
<script src="{% static 'js/timeline.min.js' %}"></script>
<script>
timeline(document.querySelectorAll('.timeline'), {
forceVerticalMode: 700,
mode: 'horizontal',
verticalStartPosition: 'left',
visibleItems: 4
});
</script>
<script>
$(window).on('load', function() {
$('#logreg').modal('show');
});
</script>
</body>
</html>
courses.html
{% extends 'partials/_base.html' %}
{% load static %}
{% block content %}
<div class="all-title-box">
<div class="container text-center">
<h1>Courses</span></h1>
</div>
</div>
<div id="overviews" class="section wb">
<div class="container">
<div class="row">
<div class="col-lg-9 blog-post-single">
<div class="row">
{% for course in courses %}
<div class="col-lg-6 col-md-6 col-12 mb-4">
<div class="course-item">
<div class="image-blog">
<img src="{{course.image.url}}" alt="" class="img-fluid">
</div>
<div class="course-br">
<div class="course-title">
<h2><a href="{% url 'course_detail' course.category.slug course.id %}" title="">{{course.name}}</a></h2>
</div>
<div class="course-desc">
<p>{{course.description | truncatechars:140}}</p>
</div>
</div>
<div class="course-meta-bot">
<ul>
<li><i class="fa fa-calendar" aria-hidden="true"></i> {{course.date|date:"d M Y"}}</li>
<li><i class="fa fa-book" aria-hidden="true"></i> {{course.teacher}}</li>
</ul>
</div>
</div>
</div><!-- end col -->
{% endfor %}
</div><!-- end row -->
</div><!-- end col -->
<div class="col-lg-3 col-12 right-single">
<div class="widget-search">
<div class="site-search-area">
<form method="get" id="site-searchform" action="{% url 'search' %}">
<div>
<input class="input-text form-control" name="search" placeholder="Search keywords..." type="text">
<input id="searchsubmit" value="Search" type="submit">
</div>
</form>
</div>
</div>
<div class="widget-categories">
<h3 class="widget-title">Categories</h3>
<ul>
{% for category in categories %}
<li><a href="{% url 'courses_by_category' category.slug %}">{{category.name}}</a></li>
{% endfor %}
</ul>
</div>
<div class="widget-tags">
<h3 class="widget-title">Search Tags</h3>
<ul class="tags">
{% for tag in tags %}
<li><a href="{% url 'courses_by_tag' tag.slug %}">{% if tag.slug in request.path %} <b>{{tag.name}}</b>{% else %}{{tag.name}}{% endif %}</a></li>
{% endfor %}
</ul>
</div>
</div>
</div><!-- end row -->
</div><!-- end container -->
</div><!-- end section -->
{% endblock %}
我希望你能帮助我,让我摆脱这种绝望。
错误很明显,它表示在您的视图中没有名为搜索的函数
请考虑添加代码和错误不是它们的 img ..
第二个错误发生在这里
<form method="get" id="site-searchform" action="{% url 'search' %}">
<div>
<input class="input-text form-control" name="search" placeholder="Search keywords..." type="text">
<input id="searchsubmit" value="Search" type="submit">
</div>
</form>
在此表单中 course.html
表单操作设置为 {% url 'seaech '%}
只要删除这个表格,一切都会起作用