根据用户选择,我想显示课程详细信息。我不想为每个课程详细信息创建多个页面。 因此,在
course-detail.html
我以 html 形式传递一个 course-code
作为隐藏值,这是我的数据库项目中的表名称。
当用户提交课程查询时,我通过 POST
方法将课程代码值传递到我的 views.py
文件中。
但在那里我无法使用 post 方法字符串作为模型名称。
courses.html
{% for courses in english_courses %}
<form action="{% url "course-detail" %}" method="POST">
{% csrf_token %}
<input type="hidden" name="course-code" value="{{courses.course_code}}">
<button class="btn-lg btn-primary d-inline-flex align-items-center" type="submit" onclick="document.location.href='{% url "course-detail" %}';">
{{course.name}}
</button>
{% endfor %}</form>
views.py
def course_detail(request):
if request.method == "POST":
course_request = request.POST['course-code']
course_request = course_request.capitalize()
course_details = course_request.objects.all()
return render(request, 'course-detail.html', {'course': course_details})
else:
messages.warning(request, "Link seems to be broken. Please contact admin.")
return render(request, 'course-detail.html')
这会引发错误:
AttributeError at /english/course-detail
'str' object has no attribute 'objects'
首先,您必须通过 POST 请求从用户处接收课程名称或课程 ID,并通过过滤该 ID 显示内容详细信息。
from .model import course <- # New
def course_detail(request):
if request.method == "POST":
course_request = request.POST['course-code']
course_request = course_request.capitalize()
course_details = course.objects.filter(course-code=course_request) <- # New
return render(request, 'course-detail.html', {'course': course_details})
else:
messages.warning(request, "Link seems to be broken. Please contact admin.")
return render(request, 'course-detail.html')