没有反向匹配

时间:2017-08-02 17:19:07

标签: python regex django

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]+)/$']

这是我的urls.py

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' ),
]

这是models.py

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

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_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 %}

当公司名称中有空格时,我才会得到反向匹配。

2 个答案:

答案 0 :(得分:1)

那是因为你的正则表达式

(?P<company_name>[0-9A-Za-z]+)

不允许公司名称中包含空格。 Django正确告诉你没有反向匹配。

选择以下选项之一:

  • 更改名称验证代码以禁止空格(并迁移现有行)或
  • 更改urls.py中的正则表达式以允许空格

我推荐第二个选项。

答案 1 :(得分:-1)

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

WindowComponent

还有一个原因是你没有使用公司ID作为参数?如下所示:

在urls.py中

(?P<company_name>[\w-]+)
模板中的

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