django.urls.exceptions.NoReverseMatch基于类的列表视图

问题描述:

我试图在cookeicutter上建立一个网站,我创建了一个名为“bots”的新应用程序,并在模型中添加了一个名为Trade和Unit的类。我在views.py中创建了两个基于类的视图;细节和列表视图。交易细节视图正常工作并指向正确的交易,但是当我尝试访问引用交易列表视图的HTML页面时,页面返回以下错误。django.urls.exceptions.NoReverseMatch基于类的列表视图

django.urls.exceptions.NoReverseMatch 
django.urls.exceptions.NoReverseMatch: Reverse for 'trade-detail' with 
arguments '('1',)' and keyword arguments '{}' not found. 0 pattern(s) 
tried: [] 

我相信事情是错误的get_absolute_url,因为当我从model.py删除列表中的错误上面将消失,页面呈现,但随后的链接不工作。

我的大部分代码是从本教程:https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views

Models.py

from django.db import models 
from datetime import date 
from django.urls import reverse 
from django.urls import reverse_lazy 
from django.conf import settings 
import uuid 


class Unit(models.Model): 

    TRADE_UNIT = (
     ('ETH', 'Ethereum'), 
     ('BTC', 'Bitcoin'), 
     ('LTC', 'Litecoin'), 
     ('IOT', 'IOTA'), 
     ('OMG', 'OmiseGo'), 
     ('BCH', 'BitcoinCash'), 

    ) 

    sell = models.CharField(max_length=3, choices=TRADE_UNIT, blank=True, default='ETH', help_text='Currency to Sell') 
    buy = models.CharField(max_length=3, choices=TRADE_UNIT, blank=True, default='BTC', help_text='Currency to Buy') 

    def get_absolute_url(self): 
     """ 
     Returns the url to access a particular instance. 
     """ 
     return reverse('unit-detail', args=[str(self.id)]) 

    def __str__(self): 
     """ 
     String for representing the Model object. 
     """ 
     return '%s, %s' % (self.sell, self.buy) 


    class Meta: 
     ordering = ['sell'] 



class Trade(models.Model): 
    title = models.CharField(max_length=200) 
    unit = models.ForeignKey(Unit, on_delete=models.SET_NULL, blank=True, null=True) 

    def get_absolute_url(self): 
     """ 
     Returns the url to access a particular book instance. 
     """ 
     return reverse('trade-detail', args=[str(self.id)]) 

    def __str__(self): 
     """ 
     String for representing the Model object. 
     """ 
     return self.title 



    class Meta: 
     db_table = 'bots_trade' 
     ordering = ['title'] 

Views.py

from django.shortcuts import render 
import datetime 
from django.shortcuts import get_object_or_404 
from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.views import generic 
from .models import Trade, Unit, TradeInstance 
import uuid 
# Create your views here 



class TradeDetailView(generic.DetailView): 
    model = Trade 

    redirect_field_name = 'redirect_to' 

class TradeListView(generic.ListView): 

    model = Trade 

    redirect_field_name = 'redirect_to' 

class UnitDetailView(generic.DetailView): 
    model = Unit 

    redirect_field_name = 'redirect_to' 

class UnitListView(generic.ListView): 
    model = Unit 

    redirect_field_name = 'redirect_to' 

def index(request): 
    """ 
    View function for home page of site. 
    """ 

    return render(
     request, 
     'bots/index.html', 
    ) 

机器人应用:urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^trades/$', views.TradeListView.as_view(), name='trades'), 
    url(r'^trade/(?P<pk>\d+)$', views.TradeDetailView.as_view(), name='trade-detail'), 
    url(r'^units/$', views.UnitListView.as_view(), name='unit'), 
    url(r'^unit/(?P<pk>\d+)$', views.UnitDetailView.as_view(), name='unit-detail'), 


] 

Tracecback EDIT2

这与贸易模式代码:

def get_absolute_url(self): 
    """ 
    Returns the url to access a particular book instance. 
    """ 
    return reverse('trade-detail', args=(self.id,)) 

/打破

django.urls.exceptions.NoReverseMatch 
django.urls.exceptions.NoReverseMatch: Reverse for 'trade-detail' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

Traceback (most recent call last) 
File "/usr/local/lib/python3.5/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__ 
return self.application(environ, start_response) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 170, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 124, in get_response 
response = self._middleware_chain(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/utils/deprecation.py", line 136, in __call__ 
response = self.get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 44, in inner 
response = response_for_exception(request, exc) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 94, in response_for_exception 
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info()) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 136, in handle_uncaught_exception 
return debug.technical_500_response(request, *exc_info) 
File "/usr/local/lib/python3.5/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response 
six.reraise(exc_type, exc_value, tb) 
File "/usr/local/lib/python3.5/site-packages/six.py", line 693, in reraise 
raise value 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/exception.py", line 42, in inner 
response = get_response(request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 217, in _get_response 
response = self.process_exception_by_middleware(e, request) 
File "/usr/local/lib/python3.5/site-packages/django/core/handlers/base.py", line 215, in _get_response 
response = response.render() 
File "/usr/local/lib/python3.5/site-packages/django/template/response.py", line 109, in render 
self.content = self.rendered_content 
File "/usr/local/lib/python3.5/site-packages/django/template/response.py", line 86, in rendered_content 
content = template.render(context, self._request) 
File "/usr/local/lib/python3.5/site-packages/django/template/backends/django.py", line 66, in render 
return self.template.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 208, in render 
return self._render(context) 
File "/usr/local/lib/python3.5/site-packages/django/test/utils.py", line 94, in instrumented_test_render 
return self.nodelist.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 994, in render 
bit = node.render_annotated(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated 
return self.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/loader_tags.py", line 174, in render 
return compiled_parent._render(context) 
File "/usr/local/lib/python3.5/site-packages/django/test/utils.py", line 94, in instrumented_test_render 
return self.nodelist.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 994, in render 
bit = node.render_annotated(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated 
return self.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/defaulttags.py", line 315, in render 
return nodelist.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 994, in render 
bit = node.render_annotated(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated 
return self.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/defaulttags.py", line 209, in render 
nodelist.append(node.render_annotated(context)) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 961, in render_annotated 
return self.render(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 1044, in render 
output = self.filter_expression.resolve(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 711, in resolve 
obj = self.var.resolve(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 852, in resolve 
value = self._resolve_lookup(context) 
File "/usr/local/lib/python3.5/site-packages/django/template/base.py", line 915, in _resolve_lookup 
current = current() 
File "/app/vicki/bots/models.py", line 50, in get_absolute_url 
return reverse('trade-detail', args=(self.id,)) 
File "/usr/local/lib/python3.5/site-packages/django/urls/base.py", line 91, in reverse 
return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) 
File "/usr/local/lib/python3.5/site-packages/django/urls/resolvers.py", line 392, in _reverse_with_prefix 
(lookup_view_s, args, kwargs, len(patterns), patterns) 
django.urls.exceptions.NoReverseMatch: Reverse for 'trade-detail' with arguments '(1,)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 
+0

您使用的命名空间网址贸易模式get_absolute_url方法去除str机器人的urls.py? – mariodev

Reverse for 'trade-detail' with arguments '('1',)'

你传入参数作为海峡不是整数。据你必须通过在整数字符串ID,所以从

def get_absolute_url(self): 
    """ 
    Returns the url to access a particular book instance. 
    """ 
    return reverse('trade-detail', args=(self.id,)) 
+0

嗨NeErAj,编辑我的代码到您的评论后,我现在收到builtins.TypeError TypeError:_reverse_with_prefix()后参数必须是一个可迭代的,而不是int – Zalkota

+0

添加您更新的回溯有问题 –

+0

好吧它的底部加 – Zalkota