如何在 views.py 中获取来自 urls.py 的参数
How to get an argument coming from urls.py in views.py
所以,我目前在 Django 中使用基于 Class 的视图,并且我的 urls.py
.
中有这个 url 调度程序
urls.py
url(r'^(?P<store_domainKey>.*)/$', views.StoreDetailView.as_view(), name='detail'),
在 views.py 中,我想从 store_domainKey
中得到一个参数,如下所示。
views.py
class StoreDetailView(DetailView):
model = Store
template_name = 'boutique/detail.html'
def get_queryset(self, store_domainKey):
store = ???
我想做的是在我的 get_queryset()
函数中访问 store_domainKey
以在变量 store
中赋值。我怎样才能做到这一点?
更新
我需要上面的原因是因为我正在尝试将我的 FBV 更改为 CBV。通过在我的 FBV 视图中执行以下操作,我的 store_domainKey
从 urls.py 变为 views.py。
def detail(request, store_domainKey):
store = get_object_or_404(Store, domainKey=store_domainKey)
我也想在我的 CBV 视图中做同样的事情。但是,get_object_or404
不起作用。
它只是抛出以下错误。
TypeError at /downeast/
get_queryset() missing 1 required positional argument: 'store_domainKey'
使用下面的代码
class StoreDetailView(DetailView):
model = Store
template_name = 'boutique/detail.html'
def get_queryset(self):
return Store.objects.filter(domainKey=self.kwargs['store_domainKey'])
您遇到错误是因为 get_queryset 不接受任何参数或 keword 参数。
由于您的 url 没有任何 pk 变量,您应该覆盖 get_object() 方法,因为详细视图期望 url 中的 pk 参数或它可以用作的任何参数pk.
def get_object(self, queryset=None):
return Store.objects.get(domainKey=self.kwargs['store_domainKey'])
所以,我目前在 Django 中使用基于 Class 的视图,并且我的 urls.py
.
urls.py
url(r'^(?P<store_domainKey>.*)/$', views.StoreDetailView.as_view(), name='detail'),
在 views.py 中,我想从 store_domainKey
中得到一个参数,如下所示。
views.py
class StoreDetailView(DetailView):
model = Store
template_name = 'boutique/detail.html'
def get_queryset(self, store_domainKey):
store = ???
我想做的是在我的 get_queryset()
函数中访问 store_domainKey
以在变量 store
中赋值。我怎样才能做到这一点?
更新
我需要上面的原因是因为我正在尝试将我的 FBV 更改为 CBV。通过在我的 FBV 视图中执行以下操作,我的 store_domainKey
从 urls.py 变为 views.py。
def detail(request, store_domainKey):
store = get_object_or_404(Store, domainKey=store_domainKey)
我也想在我的 CBV 视图中做同样的事情。但是,get_object_or404
不起作用。
它只是抛出以下错误。
TypeError at /downeast/
get_queryset() missing 1 required positional argument: 'store_domainKey'
使用下面的代码
class StoreDetailView(DetailView):
model = Store
template_name = 'boutique/detail.html'
def get_queryset(self):
return Store.objects.filter(domainKey=self.kwargs['store_domainKey'])
您遇到错误是因为 get_queryset 不接受任何参数或 keword 参数。
由于您的 url 没有任何 pk 变量,您应该覆盖 get_object() 方法,因为详细视图期望 url 中的 pk 参数或它可以用作的任何参数pk.
def get_object(self, queryset=None):
return Store.objects.get(domainKey=self.kwargs['store_domainKey'])