我正在研究一个解决方案,其中我希望在应用程序中具有一个带有可选参数的url,如果不存在,则该位置用于德国。下面是我的代码,带有django 2.2和视图的URL。
urls.py
urlpatterns = [
path('<country>', HomeView.as_view(), name='home'),
]
views.py
class HomeView(TemplateView):
template_name = 'data/index.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
queryset = DataSet.objects.filter(location=self.request.GET.get('country', 'Germany'))
return context
您可以在此处创建两个url
,一个具有country
参数,另一个不具有:
urlpatterns = [
path('', HomeView.as_view(), kwargs={'country': 'Germany'}),
path('<country>', HomeView.as_view(), name='home')
]
或者您可以让Django视图本身在默认情况下注入'Germany'
:
urlpatterns = [
path('', HomeView.as_view()),
path('<country>', HomeView.as_view(), name='home')
]
请注意,URL参数存储在self.kwargs
中,而不存储在self.request.GET
中:
from django.views.generic import ListView
class HomeView(ListView):
template_name = 'data/index.html'
model = DataSet
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).filter(
location=self.kwargs.get('country', 'Germany')
)