Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 没有反向匹配_Python_Regex_Django - Fatal编程技术网

Python 没有反向匹配

Python 没有反向匹配,python,regex,django,Python,Regex,Django,这是models.py Reverse for 'details' with arguments '('Federal Airports Authority of Nigeria (FAAN)',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['details/(?P<company_name>[0-9A-Za-z]+)/$'] urlpatterns = [ url(r'^$', view

这是
models.py

Reverse for 'details' with arguments '('Federal Airports Authority of Nigeria (FAAN)',)' and keyword arguments '{}' not found. 

1 pattern(s) tried: 

['details/(?P<company_name>[0-9A-Za-z]+)/$']
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^details/(?P<company_name>[0-9A-Za-z]+)/$', views.details, name='details'),
    url(r'^full_list/$', views.full_list, name='full_list' ),
]
class CompanyDetail(models.Model):

    name = models.CharField(max_length=300)
    company_logo = models.FileField(default='')
    company_info = models.TextField()
    company_address = models.TextField()
    tag = models.CharField(max_length=300)

    def __str__(self):
        return self.name
这是我的
views.py

Reverse for 'details' with arguments '('Federal Airports Authority of Nigeria (FAAN)',)' and keyword arguments '{}' not found. 

1 pattern(s) tried: 

['details/(?P<company_name>[0-9A-Za-z]+)/$']
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^details/(?P<company_name>[0-9A-Za-z]+)/$', views.details, name='details'),
    url(r'^full_list/$', views.full_list, name='full_list' ),
]
class CompanyDetail(models.Model):

    name = models.CharField(max_length=300)
    company_logo = models.FileField(default='')
    company_info = models.TextField()
    company_address = models.TextField()
    tag = models.CharField(max_length=300)

    def __str__(self):
        return self.name
这是模板:

def details(request, company_name):
    company = CompanyDetail.objects.get(name=company_name)
    return render(request, 'company_profiles/details.html',
    {'company':company} )

def full_list(request):
    lists = CompanyDetail.objects.all()
    return render(request, 'company_profiles/full_list.html', 
    {'lists':lists})
{%extends'company\u profiles/base.html%}
{%block content%}
{列表%中的公司为%}

{%empty%} 没有找到公司

{%endfor%} {%endblock内容%}

我只在公司名称中有空格时才得到反向匹配。

这是因为您的正则表达式

{% extends 'company_profiles/base.html' %}

{% block content %}

{% for company in lists %}
    <p>
    <div class="alert alert-info" role="alert">
     <a href="{% url 'company_profiles:details' company.name %}" class="alert-link">{{ company }}</a>
    </div>
    </p>


{% empty %}
    <p>No companies found</p>

{% endfor %}
{% endblock content %}
(?P[0-9A-Za-z]+)
不允许在公司名称中使用空格。Django正确地告诉您没有反向匹配

选择以下选项之一:

  • 将名称验证代码更改为不允许使用空格(并迁移现有行),或
  • 更改
    url.py
    中的正则表达式以允许空格

我推荐第二种选择

您应该在urls.py中尝试匹配公司名称

(?P<company_name>[0-9A-Za-z]+)
(?P[\w-]+)
还有一件事,为什么不使用公司ID作为参数?如下图所示:

在url.py中

(?P<company_name>[\w-]+)
(?P[0-9]+)/
在模板中

(?P<company_id>[0-9]+)/


url(r'^details/(?P[A-Za-z0-9_+())+)/$,views.details,name='details'),我猜他希望url中的名称不是id。个人选择正确。但标题不是好方法。否则,他应该使用slug field。你能解释一下吗?阅读关于slug为什么slug在URL中很好的完整文章