此视图用于获取EducationalRecord
模型中的所有记录:
def all_education_resume(request):
RESUME_INFO['view'] = 'education'
educations_resume = EducationalRecord.objects.all().order_by('-created_date')
template = 'resumes/all_resume.html'
context = {'educations_resume': educations_resume, 'resume_info': RESUME_INFO}
return render(request, template, context)
现在,如果我想为其他模型(例如工作履历,研究履历等)准确地编写此视图, 我必须另外一个观点。 我的问题是:
如何获取所有这些请求的视图,因此请先检查以下网址 请求,然后进行相关查询?如何控制网址 我认为有要求吗?
我的其他问题与我的第一个问题完全相同,只是有所不同:
必须在特定模板中呈现的控件视图。 第二个问题是模板和视图之间的比例是 视图与url的比例或如何创建模板 多个视图(例如,用于各种数据库简历 简历,我有一个模板),然后根据所呈现的视图, 模板输出是不同的。
我已经实现了以下两个问题:
RESUME_INFO['view']
的值,然后在模板页面中对其进行检查并指定了相应的模板。这两个问题的最佳解决方案是什么?
答案 0 :(得分:1)
如何获得所有这些请求的视图,因此首先检查请求的URL,然后进行相关查询?如何在我的视图中控制URL请求?
您可以访问request.path
,也可以让url(..)
传递带有kwargs的参数,该参数例如包含对模型的引用,但这通常是不好的设计。通常,如果使用不同的模型,则可能还必须对这些模型进行排序,对它们进行不同的过滤,对它们进行不同的渲染等。如果不这样,则通常表明建模存在问题。
不过,您可以使用class-based views [Django-doc]来删除尽可能多的样板。您的视图看起来像ListView
[Django-doc],通过使用这种视图并在必要时进行修补,我们可以省略大多数“ 样板”代码:
# app/views.py
from django.views.generic.list import ListView
class MyBaseListView(ListView):
resume_info = None
template = 'resumes/all_resume.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['resume_info'] = {'view': self.resume_info}
return context
然后在各个列表视图中,只需指定resume_info
和model
或queryset
即可使用'all_resume.html'
模板进行渲染,例如:>
# app/views.py
# ...
class EducationalResumeView(MyBaseListView):
queryset = EducationalRecord.objects.order_by('-created_date')
resume_info = 'education'
class OtherModelView(MyBaseListView):
model = OtherModel
resume_info = 'other_info'
因此,我们在这里可以仅使用一次继承来定义公共事物,并在多个视图中使用它。如果需要在特定视图中更改某些内容,可以在该级别进行覆盖。
在urls.py
中,您可以使用.as_view()
method [Django-doc]定义这种视图。例如:
# app/urls.py
from django.urls import path
from app.views import EducationalResumeView, OtherModelView
urlpatterns = [
path('education/', EducationalResumeView.as_view()),
path('other/', OtherModelView.as_view()),
]