Python 使用包含中的URL名称时导致NoReverseMatch的URL模板标记

Python 使用包含中的URL名称时导致NoReverseMatch的URL模板标记,python,django,django-urls,Python,Django,Django Urls,定义如下: url.py urlpatterns = [ url(r'^admin/', admin.site.urls), # Homepage url(r'^$', projects.homepage, name='homepage'), url(r'^create_new_project/$', projects.create_new_project), # Project page url(r'^(?P<project_path&

定义如下:

url.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),

    # Homepage
    url(r'^$', projects.homepage, name='homepage'),
    url(r'^create_new_project/$', projects.create_new_project),

    # Project page
    url(r'^(?P<project_path>\w+)/', include('projects.urls')),        
]
from . import views as projects
from gpuz import views as gpuz  # gpuz as a sample tool
from models import views as models

urlpatterns = [
    url(r'^$', projects.projectpage, name='project-page'),
    url(r'^gpuz/$', gpuz.page),
    url(r'^settings/$', models.settings_new),
]
我能够解析URL,例如
localhost/myproject/
localhost/myproject/gpuz/
,但是通过模板生成URL不会给我带来任何错误

例如:

base.html

<div class="navbar-collapse collapse ">
    <ul id="menu-top" class="nav navbar-nav navbar-right">
        <li><a href="{% url 'homepage' %}" class="navbar-btn-home">Home</a></li>

        {% if project %}
            <!-- NoReverseMatch -->
            <li><a href="{% url 'project-page' %}">{{ project.name }}</a></li>
        {% endif %}

        {% if project_tools %}
            {% for tool in project_tools %}
                <!-- Expected URL: /myproject/gpuz/ -->
                <li><a href="{% url 'project-page' tool.name %}" class="navbar-btn-{{tool.name}}">{{ tool.name }}</a></li>
            {% endfor %}

            <li><a href="/settings" class="navbar-btn-settings">Settings</a></li>
        {% endif %}
    </ul>
</div>
临时解决方案

我花了太多时间试图解决这个问题,所以我当前的解决方法是链接变量以形成伪硬编码URL,例如
href=“/{{project.URL\u path}}/{{tool.name}}/”

试试这个:

<li><a href="{% url 'projects:project-page' %}">{{ project.name }}</a></li>
  • 试试这个:

    <li><a href="{% url 'projects:project-page' %}">{{ project.name }}</a></li>
    
  • 项目URL.py

    添加项目路径url(注意:从模板传递项目路径,如
    {%url'项目页面'project.path%}
    )

    项目URL.py

    添加项目路径url(注意:从模板传递项目路径,如
    {%url'项目页面'project.path%}

    )

    您希望在
    {%url'项目页面“%”中得到什么
    当您尝试将
    工具.name
    作为参数传递时,您对
    项目页面的定义不接受任何参数。
    项目页面的
    url
    标记在这里需要一个参数
    项目路径
    @Aison
    /myproject/
    example@Selcuk我还没有拿到NoReverseMatch参数在
    {%url'项目页面“%”中希望获得的内容
    当您尝试将
    工具.name
    作为参数传递时,您对
    项目页面的定义不接受任何参数。
    项目页面的
    url
    标记在这里需要一个参数
    项目路径
    @Aison
    /myproject/
    example@Selcuk我还没有拿到NoReverseMatch在
    projects/url.py
    中添加
    app\u name=projects
    后,argumentsDoesn也不起作用。在
    projects/url.py
    中添加
    app\u name=projects
    后,Arguments Doesn也不起作用。它现在会打断其他页面。我觉得它把正则表达式当作一个字符串,而不是实际的URL路径(我可能错了)URL(r'^',include('projects.URL')),不起作用,它现在打断了其他页面。我觉得它将正则表达式作为字符串,而不是实际的URL路径(我可能错了)URL(r'^',include('projects.URL')),
    url(r'^(?P<project_path>\w+)/', include('projects.urls'))
    
    url(r'^$', include('projects.urls')),