Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django在ListView中清空self.args时<;pk>;在URL.py中_Python_Django_Listview_Django Views_Django Class Based Views - Fatal编程技术网

Python Django在ListView中清空self.args时<;pk>;在URL.py中

Python Django在ListView中清空self.args时<;pk>;在URL.py中,python,django,listview,django-views,django-class-based-views,Python,Django,Listview,Django Views,Django Class Based Views,我想为示例获取项目名称。它应该在self.args中,因为我的url.py看起来像这样(有很多URL,所以我只发布重要的URL): projects/url.py app_name = 'projects' urlpatterns = [ url(r"^$", ProjectListView.as_view(), name="projects_list"), url(r"^(\w+)/robjects/", include("robjects.urls")), url(r

我想为示例获取项目名称。它应该在self.args中,因为我的url.py看起来像这样(有很多URL,所以我只发布重要的URL):

projects/url.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"),
...
]
app_name="robjects"
urlpatterns = [
...
    url(r'^(?P<pk>[0-9]+)/samples/', include("samples.urls")),
]
robjects/url.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"),
...
]
app_name="robjects"
urlpatterns = [
...
    url(r'^(?P<pk>[0-9]+)/samples/', include("samples.urls")),
]
这是输出:

args,  ()
kwargs {'pk': '27'}
我想通过robject_id和project_name来过滤我的qs,因为robject_id可以正常工作。我不知道如何获取用于筛选的项目名称

此外,我不得不说,在标签(“URL中没有包含”)中,我使用self.argss[0]实现了它,它可以工作,但只在表单标签列表视图中工作

代码如下:

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时:

所有的工作。在我的args中是project_name,我可以自己捕获它。args[0]

但是当我加上我的参数是空的

url(r“^(\w+)/robjects/(?P[0-9]+)/samples/$”,SampleListView.as_view(),name='sample_list_view'),
当我这样定义两个Kwarg时:

url(r"^(?P<project_name>[\w\-]+)/robjects/(?P<pk>[0-9]+)/samples/list/$",SampleListView.as_view(), name='sample_list_view'),
url(r“^(?P[\w\-]+)/robjects/(?P[0-9]+)/samples/list/$”,SampleListView.as_view(),name='sample_list_view'),
args empty-正如我所期望的,kwargs和kwargs都正常并传递给视图

这是Django bug还是有任何方法可以使用self.args?它们是否被kwargs覆盖


谢谢你的帮助

它看起来像一只虫子。我对其进行了测试,当您将args和kwargs传递到您的url时,如:

url(r"^(\w+)/test1/(?P<pk>[0-9]+)/test2/$", TestListView.as_view(), name='list_view'),
url(r“^(\w+)/test1/(?P[0-9]+)/test2/$”,TestListView.as_view(),name='list_view'),
然后ListView为args返回空元组(不应该)。
当您只将args或kwargs传递到url时,它就可以工作。

这看起来像一个bug。我对其进行了测试,当您将args和kwargs传递到您的url时,如:

url(r"^(\w+)/test1/(?P<pk>[0-9]+)/test2/$", TestListView.as_view(), name='list_view'),
url(r“^(\w+)/test1/(?P[0-9]+)/test2/$”,TestListView.as_view(),name='list_view'),
然后ListView为args返回空元组(不应该)。 当您只将args或kwargs传递到url中时,它会起作用

url(r"^(\w+)/test1/(?P<pk>[0-9]+)/test2/$", TestListView.as_view(), name='list_view'),