我想给样品取一个项目名称。它应该在里面自身参数因为我的网址.py看起来是这样(有很多网址,所以我只发布重要的网址):
项目/网址.py在
app_name = 'projects'
urlpatterns = [
url(r"^$", ProjectListView.as_view(), name="projects_list"),
url(r"^(\w+)/robjects/", include("robjects.urls")),
url(r"^(\w+)/tags/$", TagsListView.as_view(), name="tag_list"),
...
]
机器人/网址.py在
^{pr2}$样品/网址.py在
app_name="samples"
urlpatterns = [
url(r'^list/$', SampleListView.as_view(), name='sample_list_view'),
url(r'^create/$', SampleCreateView.as_view(), name='sample_create_view'),
url(r'^(?P<sample_id>[0-9]+)/update/$', SampleUpdateView.as_view(), name='sample_update'),
url(r'^(?P<sample_id>[0-9]+)/delete/$', SampleDeleteView.as_view(), name='sample_delete'),
]
我要获取项目名称,即项目的“(\w+)”部分/网址.py. 为此,我在示例中编写了代码/视图.py. 我试着做项目名称=自身参数[0]但是我的参数是空的。在
类SampleListView(ListView): 模型=样品 template_name=“样本/样本_列表.html““
def get(self, request, *args, **kwargs):
"""A base view for displaying a list of objects."""
# check if project exists
try:
pk = kwargs['pk']
robject = Robject.objects.get(id=pk)
# add project to view attributes
self.robject = robject
except Robject.DoesNotExist:
raise Http404
print(self.args) # it should be a project name here
return super(SampleListView, self).get(request, *args, **kwargs)
def get_queryset(self, *args, **kwargs):
"""
Overwrite orginal qs and add filtering by robject
"""
# original queryset
qs = super().get_queryset(*args, **kwargs)
print('args, ',self.args)
print('kwargs', self.kwargs)
pk = self.kwargs['pk']
robject = Robject.objects.get(id=pk)
return qs.filter(robject=self.robject)
这是输出:
args, ()
kwargs {'pk': '27'}
我想通过robject_id和project_name过滤我的qs,对于robject_id,它工作得很好。我不知道如何获取项目名称进行筛选。在
此外,我不得不说,在标签中(“在url中没有包含”)我用了它自身参数[0]它是有效的,但仅限于表单标记ListView。在
代码如下:
class TagsListView(LoginRequiredMixin, ListView):
model = Tag
template_name = "tags/tag_list.html"
def get(self, request, *args, **kwargs):
"""A base view for displaying a list of objects."""
# check if project exists
try:
project = Project.objects.get(name=args[0]) # it works fine
# add project to view attributes
self.project = project
except Project.DoesNotExist:
raise Http404
return super(TagsListView, self).get(request,*args, **kwargs)
我发现:
当我这样定义我的URL时:
url(r"^(\w+)/robjects/samples/$", SampleListView.as_view(), name='sample_list_view'),
所有的工作。在我的args中是项目名称,我可以通过自身参数[0]
但当我加上我的参数是空的
url(r"^(\w+)/robjects/(?P<pk>[0-9]+)/samples/$", SampleListView.as_view(), name='sample_list_view'),
当我这样定义两个夸克时:
url(r"^(?P<project_name>[\w\-]+)/robjects/(?P<pk>[0-9]+)/samples/list/$",SampleListView.as_view(), name='sample_list_view'),
args为空-正如我所料,kwargs都是正常的,并传递给视图
这是一个Django bug还是有什么方法可以使用自身参数? 它们被夸克覆盖了吗?在
谢谢你的帮助!在
看起来像只虫子。我测试过,当你把args和kwargs传入你的url时,比如:
然后ListView返回args的空元组(不应该)。 当您只将arg或kwargs传递到url中时,它就起作用了。在
相关问题 更多 >
编程相关推荐