Как я могу получить представление для всех этих запросов, поэтому сначала проверьте URL-адрес запроса, а затем выполните соответствующий запрос?Как я могу контролировать запросы URL в моих представлениях?
Вы можете получить доступ к request.path
, или вы можете позволить url(..)
s передать параметр с помощью kwargs, который содержит ссылку на модель, например,но это обычно плохой дизайн.Как правило, если вы используете разные модели, вам, вероятно, придется упорядочить их по-разному, отфильтровать их по-разному, отобразить их по-разному и т. Д. Если нет, то это обычно указывает на то, что с моделированием что-то не так.
Выоднако можно использовать представления на основе классов [Django-doc] , чтобы удалить как можно больше шаблонных данных.Ваше представление выглядит как ListView
[Django-doc] . Используя такое представление и исправляя при необходимости, мы можем опустить большую часть шаблона * "code:
# app/views.py
from django.views.generic.list import ListView
class MyBaseListView(ListView):
resume_info = None
<b>template = 'resumes/all_resume.html'</b>
def <b>get_context_data</b>(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(<b>MyBaseListView</b>):
<b>queryset = EducationalRecord.objects.order_by('-created_date')</b>
resume_info = 'education'
class OtherModelView(MyBaseListView):
<b>model = OtherModel</b>
resume_info = 'other_info'
Таким образом, мы можем использовать наследование для определения общих вещей только один раз и использовать его в нескольких представлениях.Если нам нужно что-то изменить в конкретном представлении, мы можем переопределить это на этом уровне.
В urls.py
вы определяете такое представление с помощью .as_view()
метод [Джанго-док] .Например:
# app/urls.py
from django.urls import path
from app.views import EducationalResumeView, OtherModelView
urlpatterns = [
path('education/', EducationalResumeView<b>.as_view()</b>),
path('other/', OtherModelView<b>.as_view()</b>),
]