Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
django与筛选的ListView没有反向匹配_Django_Django Templates_Django Urls - Fatal编程技术网

django与筛选的ListView没有反向匹配

django与筛选的ListView没有反向匹配,django,django-templates,django-urls,Django,Django Templates,Django Urls,我现在已经解决了这个问题,下面是我需要做的,我没有编辑我的原始问题。因此,我的原始视图很好,尽管我添加了一个try-except块,以便能够过滤所有内容: class ProjectListView(ListView): def get_queryset(self): try: self.area = get_object_or_404(Area, name=self.kwargs['area']) except:

我现在已经解决了这个问题,下面是我需要做的,我没有编辑我的原始问题。因此,我的原始视图很好,尽管我添加了一个try-except块,以便能够过滤所有内容:

class ProjectListView(ListView):

    def get_queryset(self):
        try:
            self.area = get_object_or_404(Area, name=self.kwargs['area'])
        except:
            return Project.objects.all()
        return Project.objects.filter(area=self.area)
我不能告诉你这是否是一个好的做法,但它奏效了。接下来,我必须修改我的url.py文件,因为我的“项目创建”url恰好与我的“项目列表”url匹配,这通过在我的项目列表中添加“列表/”来修复:

urlpatterns = [
     path('list/<area>/', ProjectListView.as_view(), name='project-list'),
     path('project-create/',
          ProjectCreateView.as_view(), name='project-create'),
     path('<slug:slug>/update/', project_update_view, name='project-update'),
     path('search/', search, name='search'),
]
以下是我的应用程序URL:

urlpatterns = [
     path('<area>/', ProjectListView.as_view(), name='project-list'),
     path('project-create/',
          ProjectCreateView.as_view(), name='project-create'),
     path('<slug:slug>/update/', project_update_view, name='project-update'),
     path('search/', search, name='search'),
]
urlpatterns=[
路径('
它不再起作用,因为它在某种程度上期望“面积”

以下是我得到的错误:

NoReverseMatch at/si/运营改进/
找不到参数的“项目列表”的反转。尝试了1种模式:['si/(?P[^/]+)/$']
请求方法:获取
请求URL:http://127.0.0.1:8000/si/Operational%20Improvement/
Django版本:2.2.1
异常类型:NoReverseMatch
异常值:
找不到参数的“项目列表”的反转。尝试了1种模式:['si/(?P[^/]+)/$']
异常位置:/Users/me/anaconda3/envs/django_env/lib/python3.7/site-packages/django/url/resolvers.py in_reverse_,带前缀,第668行
Python可执行文件:/Users/me/anaconda3/envs/django_env/bin/Python
Python版本:3.7.3
Python路径:
['/Users/me/Documents/Python/pcc_django',
“/Users/me/.vscode/extensions/ms python.python-2019.9.34474/pythonFiles”,
“/Users/me/anaconda3/envs/django_env/lib/python37.zip”,
“/Users/me/anaconda3/envs/django_env/lib/python3.7”,
“/Users/me/anaconda3/envs/django_env/lib/python3.7/lib dynload”,
“/Users/me/anaconda3/envs/django_env/lib/python3.7/site packages']
服务器时间:2019年9月5日星期四09:52:37+0000
模板呈现期间出错
在template/Users/me/Documents/Python/pcc_django/project_portal/templates/project_portal/base.html中,第60行出现错误
找不到参数的“项目列表”的反转。尝试了1种模式:['si/(?P[^/]+)/$']

我应该在url中传递什么来获取“全部”,而不仅仅是过滤后的“区域”?

您似乎将url定义为(注意,它需要url中的
区域
的值):


解决方案1:
区域
传递给您的
url
标记,如下所示

// assuming that 'area' is an instance of the model 'Area'
<a href="{% url 'project-list' area.name %}">
并修改视图以处理没有
区域的情况:

class ProjectListView(ListView):
    model = Project

    def get_queryset(self):
        qs = super().get_queryset()

        try:
            qs = qs.filter(area__name=self.kwargs['area'])
        except KeyError:
            # will land here if 'area' is not present, so we return all
            # instances and do not filter anything
            pass

        return qs
在你的模板中,现在可以有两个链接了

<a href="{% url 'project-list' %}">
<a href="{% url 'project-list-with-area' area.name %}">


它需要
模式的一个值,因此您需要创建另一个
路径(…)
。如何做到这一点,因为有两个URL指向同一个位置似乎不起作用?无法让它们起作用,由于某些原因,django模板无法处理此问题,我只得到“带参数的‘项目列表’('')的相反结果'未找到。尝试了1个模式:['si/(?P[^/]+)/$'”@iFunction注意,我建议对两个路径使用不同的名称,例如,一个带区域的
项目列表
,另一个与
项目列表
相同。我还没有做到这一点,我似乎无法像文档中所说的那样向url传递额外的参数,这是难以置信的复杂。谢谢,我现在已经整理好了,my问题在链接周围使用了“{{}”而不是“{%}”。您还无意中解决了我在上面写的“尝试除外”块中遇到的另一个问题。我将用有效的方法编辑我的问题,但非常感谢您的帮助。
path('<area>/', ProjectListView.as_view(), name='project-list'),
<a href="{% url 'project-list' %}">
// assuming that 'area' is an instance of the model 'Area'
<a href="{% url 'project-list' area.name %}">
path('', ProjectListView.as_view(), name='project-list'),
path('<area>/', ProjectListView.as_view(), name='project-list-with-area'),
class ProjectListView(ListView):
    model = Project

    def get_queryset(self):
        qs = super().get_queryset()

        try:
            qs = qs.filter(area__name=self.kwargs['area'])
        except KeyError:
            # will land here if 'area' is not present, so we return all
            # instances and do not filter anything
            pass

        return qs
<a href="{% url 'project-list' %}">
<a href="{% url 'project-list-with-area' area.name %}">