将DRF路由器与django URL模式相结合

将DRF路由器与django URL模式相结合,django,django-rest-framework,Django,Django Rest Framework,如何使用app\u name='scrumboard'将django urlpatterns与DRF路由器结合起来?我尝试了所有解释过的方法,但仍然无法解决这个问题。到目前为止,我有以下URL.py文件: #scrumboard/urls.py from rest_framework.routers import DefaultRouter from .api import ListViewSet, CardViewSet from django.urls import re_path, pa

如何使用
app\u name='scrumboard'
将django urlpatterns与DRF路由器结合起来?我尝试了所有解释过的方法,但仍然无法解决这个问题。到目前为止,我有以下URL.py文件:

#scrumboard/urls.py

from rest_framework.routers import DefaultRouter
from .api import ListViewSet, CardViewSet
from django.urls import re_path, path, include
from . import views

router = DefaultRouter()
router.register(r'lists', ListViewSet)
router.register(r'cards', CardViewSet)

app_name = 'scrumboard'
urlpatterns = [
    path('', views.index, name="index"),
    re_path(r'^api/', include((router.urls))),
]
这是我的项目URL.py:

#project/urls.py

from django.contrib import admin
from django.urls import include, path, re_path
#Add URL maps to redirect the test URL to our application
from django.views.generic import RedirectView
# Use static() to add url mapping to serve static files during development (only)
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', include('home.urls')),
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')),
    path('test/', RedirectView.as_view(url='/catalog/', permanent=True)),
    path('polls/', include('polls.urls')),
    path('blog/', include('blog.urls')),
    path('catalog/', include('catalog.urls')),
    path('scrumboard/', include('scrumboard.urls'))
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
在我的模板中,我将有机会定义动态url,如下所示:

<li><a href="{% url 'scrumboard:index' %}">Scrumboard</a></li>
  • 这将带我去我的Scrumboard应用程序

    使用上面的代码,当我转到这个url localhost:8000/scrumboard/时,我得到一个错误

    更新

    当我使用localhost:8000/scrumboard/api时,它工作得很好

    更新

    完全回溯

    更新


    添加了project url.py代码

    我们如何期望
    /scrumboard/
    与第一个正则表达式匹配?是否有一个外部
    urls.py
    文件包含您提到的文件

    在缺乏更多信息的情况下,这是否有效

    urlpatterns = [
        path('^scrumboard/?$', views.index, name="index"),
        re_path(r'^api/', include((router.urls))),
    ]
    

    我只是想删除这个问题,但我想可能会有其他人遇到这个问题,并决定描述问题的实质

    由于经验不足,我在错误的地方寻找问题

    按照主页模板上的链接进行操作:

    <li><a href="{% url 'scrumboard:index' %}">Scrumboard</a></li>
    
    {% extends 'base.html' %}
    {% load static %}
    
    
    {% block title %}
        <title>Scrumboard</title>
    {% endblock %}
    {% block extracss %}
        <link rel="stylesheet" href="{% static 'scrumboard/css/main.css' %}" />
    {% endblock %}
    
    {% block content %}
            <a href="{% url 'scrumboard:lists' %}" target="_blank" class="top-menu">Lists</a><br>
            <a href="{% url 'scrumboard:cards' %}" target="_blank" class="top-menu">Cards</a>
            <hr>
              <div ng-app="scrumboard.demo">
                {% verbatim %}
                <div ng-controller="ScrumboardController">
                  <div ng-repeat="list in data">
                    <h3>{{list.name}}</h3>
                    <ul>
                      <li ng-repeat="card in list.cards">{{card.title}}</li>
                    </ul>
                    <div class="input-group">
                      <input type="text" ng-model="new_title">
                      <button class="btn btn-outline-secondary" ng-click="add(list, new_title)">+</button>
                    </div>
                  </div>
                </div>
                {% endverbatim %}
                  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
                  <script type="text/javascript" src="{% static 'scrumboard/js/scrumboard.js' %}"></script>
              </div>
    {% endblock %}
    
    我们运行了一个在view.py中定义的函数,它接受这个请求并在
    scrumboard/index.html

    #scrumboard/views.py
    
    def index(request):
        return render(request, 'scrumboard/index.html', {})
    
    错误就在这里

    Exception Type: NoReverseMatch at /scrumboard/
    Exception Value: Reverse for 'lists' not found. 'lists' is not a valid view function or pattern name.
    
    我使用django,因为我有几个应用程序,每个应用程序都有自己的index.html模板。我不得不猜测问题出在这个模板的某个地方:

    <li><a href="{% url 'scrumboard:index' %}">Scrumboard</a></li>
    
    {% extends 'base.html' %}
    {% load static %}
    
    
    {% block title %}
        <title>Scrumboard</title>
    {% endblock %}
    {% block extracss %}
        <link rel="stylesheet" href="{% static 'scrumboard/css/main.css' %}" />
    {% endblock %}
    
    {% block content %}
            <a href="{% url 'scrumboard:lists' %}" target="_blank" class="top-menu">Lists</a><br>
            <a href="{% url 'scrumboard:cards' %}" target="_blank" class="top-menu">Cards</a>
            <hr>
              <div ng-app="scrumboard.demo">
                {% verbatim %}
                <div ng-controller="ScrumboardController">
                  <div ng-repeat="list in data">
                    <h3>{{list.name}}</h3>
                    <ul>
                      <li ng-repeat="card in list.cards">{{card.title}}</li>
                    </ul>
                    <div class="input-group">
                      <input type="text" ng-model="new_title">
                      <button class="btn btn-outline-secondary" ng-click="add(list, new_title)">+</button>
                    </div>
                  </div>
                </div>
                {% endverbatim %}
                  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
                  <script type="text/javascript" src="{% static 'scrumboard/js/scrumboard.js' %}"></script>
              </div>
    {% endblock %}
    
    {%extends'base.html%}
    {%load static%}
    {%block title%}
    Scrumboard
    {%endblock%}
    {%block extracss%}
    {%endblock%}
    {%block content%}
    

    {%verbatim%} {{list.name}
    • {{card.title}
    + {%endverbatim%} {%endblock%}
    看到这些线,我想问题可能在于:

    <a href="{% url 'scrumboard:lists' %}" target="_blank" class="top-menu">Lists</a><br>
    <a href="{% url 'scrumboard:cards' %}" target="_blank" class="top-menu">Cards</a>
    

    我决定只评论他们。在认为问题已经解决后,我重新加载了页面,但错误仍然再次出现

    <!-- <a href="{% url 'scrumboard:lists' %}" target="_blank" class="top-menu">Lists</a><br>
    <a href="{% url 'scrumboard:cards' %}" target="_blank" class="top-menu">Cards</a> -->
    
    
    
    但是django忽略了通常的html注释,并尝试读取注释后的代码。所以我的错误没有消失,我开始在别处寻找问题。
    由于缺乏经验,我问了一个错误的问题只要删除这行就可以解决我的问题。

    是否应该启动
    索引
    视图?是否尝试将路由器路由放在常规视图路径之前,并使用空的urlpath
    re_路径(r'^',include((router.url)),
    ?是的。我在scrumboard/index.html下定义了呈现模板的索引函数