【发布时间】:2021-07-18 15:20:09
【问题描述】:
我是 django 的新手。我正在使用本教程https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views,但无法正确处理我的应用程序。 我在我的“edusys”项目中创建了一个应用程序“教育”。我正在尝试从数据库中获取教师列表并转到每个教师的页面,在那里我将能够从数据库中查看他们的信息。
当我使用“runserver”时出现下一个错误:
我做错了什么?我自己无法解决问题,在谷歌中找不到正确的答案。
我的这个项目的文件是这样的:
education/models.py:
from django.db import models
from django.urls import reverse
class Teachers(models.Model):
tcode = models.CharField(max_length=10, primary_key=True)
last_name = models.CharField(max_length=20)
first_name = models.CharField(max_length=30)
middle_name = models.CharField(max_length=20, null=True, blank=True)
department_s = models.ForeignKey('Departments', on_delete=models.SET_NULL, null=True)
employee_post = models.CharField(max_length=20)
academic_degree = models.CharField(max_length=40)
email = models.EmailField(max_length=50)
GENDER_UNIT = (
('m', 'Мужчина'),
('f', 'Женщина'),
)
gender = models.CharField(max_length=1, choices=GENDER_UNIT)
class Meta:
ordering = ['last_name']
def __str__(self):
return '%s %s %s' % (self.last_name, self.first_name, self.middle_name)
def get_absolute_url(self):
return reverse("teachers_detail", args=[str(self.tcode)])
教育/urls.py:
from django.urls 导入路径 从 。导入视图 从 django.conf.urls 导入 url
app_name = 'education'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^teachers/$', views.TeachersListView.as_view(), name='teachers'),
#url(r'^teachers/(?P<pk>\d+)$', views.TeachersDetailView.as_view(), name='teachers_detail'),
url(r'^teachers/<int:pk>$', views.TeachersDetailView.as_view(), name='teachers_detail'),
]
education/views.py:
from django.shortcuts import render
from django.http import HttpResponse
from .models import Teachers
from django.views import generic
def teachers_detail(request, pk):
context = dict()
return render(request, 'education/teachers_detail.html', context)
class TeachersListView(generic.ListView):
model = Teachers
paginate_by = 10
context_object_name = 'teachers_list'
template_name = 'education/teachers_list.html'
class TeachersDetailView(generic.DetailView):
model = Teachers
#book_id=Teachers.objects.get(pk=Teachers.tcode)
教育/teachers_list.html:
{% extends "base_generic.html" %}
{% block content %}
<div class="container"><div class="col-12"><h1>Teachers list</h1></div></div>
<div class="container">
{% if teachers_list %}
<table class="table">
<tbody>
{% for Teachers in teachers_list %}
<tr>
<th scope="row"></th>
<td><a href="{{ Teachers.get_absolute_url }}">{{ Teachers.last_name }} {{ Teachers.first_name }} {{ Teachers.middle_name|default_if_none:"" }}</a> ({{Teachers.department_s}})</td>
<th scope="row"></th>
<td>{{ Teachers.email }}</a></td>
<th scope="row"></th>
<td><a href="profile.html" class="btn btn-primary" role="button">Профиль</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>list is empty.</p>
{% endif %}
</div>
{% endblock %}
教育/teachers_detail.html:
{% extends "base_generic.html" %}
{% block content %}
<h1>{{ Teachers.last_name }} {{ Teachers.first_name }} {{ Teachers.middle_name }}</h1>
<p><strong>email:</strong> {{ Teachers.email }}</a></p>
<p><strong>department:</strong> {{ Teachers.department_s }}</a></p>
<p><strong>employee post:</strong> {{ Teachers.employee_post }}</a></p>
<p><strong>academic dehree:</strong> {{ Teachers.academic_degree }}</a></p>
{% endblock %}
【问题讨论】:
-
从错误页面上的 URI
/system/teachers/来看,我假设education.urls包含在不同的 urls.py 中?如果include()有命名空间参数,那么reverse('teachers_detail')将缺少其命名空间组件。 -
@elyas 你是什么意思?我不确定我是否理解你所说的
-
这行
path('/system/', include('education.urls'))是否在您项目中某个不同的 urls.py 文件(不是education/urls.py)中?如果有,有namespace吗? -
@elyas 是的,看起来你说的是:path('system/', include('education.urls'))
-
您可能会混合使用新旧 URL 定义。在您的 urls.py 中尝试
from django.urls import path和path('teachers/<int:pk>', views.TeachersDetailView.as_view(), name='teachers_detail'),
标签: python django django-models django-views