ReverseNotFound - Не удается подключить подробный вид к списковому виду - PullRequest
0 голосов
/ 19 октября 2018

Когда я пытаюсь перейти к представлению asset_list, он зависает на get_absolute_url() и выдает ошибку

Reverse for 'asset_detail' with keyword arguments '{'id': 1}' not found. 1 pattern(s) tried: ['en/marketing/$/<int:id>/']

Я использую несколько экземпляров этогоприложение активов вокруг сайта, и каждый из них будет предоставлять несколько различных активов на основе атрибута тега.Apphooks работают отлично, и все в смс.У меня все работало, пока я не начал экспериментировать с подробными видами.Я думаю, что у меня есть две проблемы, одна с get_absolute_url и одна с urls.py

Это то, что у меня есть

urls.py

from django.conf.urls import url, include
from .views import AssetListView, AssetDetailView

app_name = 'assets'
urlpatterns = [
    # List View
    url(r'^$', AssetListView, name="asset_list"),
    url(r'^$/<int:id>/', AssetDetailView, name='asset_detail')

]

models.py

class Asset(models.Model):
    name = models.CharField(max_length=50, blank=False)
    description = PlaceholderField('asset_description')
    asset_category = models.ManyToManyField(Asset_Category, blank=True)
    tag = models.ManyToManyField(Tag, blank=True)
    product_category = models.ManyToManyField(Category, blank=True)
    product_series = models.ManyToManyField(Series, blank=True)
    product_line = models.ManyToManyField(Line, blank=True)
    product = models.ManyToManyField(Product, blank=True)
    url = models.CharField(max_length=250, blank=True, verbose_name='Video URL')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.BooleanField(default=True)


    def get_absolute_url(self):
        return reverse("assets:asset_detail", kwargs={"id": self.id})

views.py

def AssetListView(request, *args, **kwargs):
    path = os.path.basename(os.path.normpath(request.path))
    print(path)

    page_obj = Title.objects.filter(slug=path).first()
    print (page_obj)

    for obj in Tag.objects.all():
        print (obj.name)
        if obj.name == page_obj.title:
            queryset = Asset.objects.filter(tag=obj.id)
            context = {
                'object_list': queryset,
            }
            return render(request, 'asset_view.html', context)  

    queryset = Asset.objects.all()

    context = {
        'object_list': queryset,
    }
    return render(request, 'asset_view.html', context)



def AssetDetailView(request, *args, **kwargs):
    return HttpResponse('<h1>AssetDetailView<h1>')

asset_view.html

{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
    {% placeholder "content" %}
    <ul>
        {% for obj in object_list %}
            <li>
                <a href="{{obj.get_absolute_url}}">{{ obj.name }}</a>
            </li>

        {% endfor %}
    </ul>   

{% endblock content %}

1 Ответ

0 голосов
/ 19 октября 2018

URL недействителен, вы не можете поставить якорь $ в середине, так как $ означает end строки.Кроме того, поскольку вы используете url(..), это должно быть регулярное выражение, например:

url(r'^<b>(?P\d+)</b>/$', AssetDetailView, name='asset_detail')

Обратите внимание, что PEP-8 советует писать имена функций в нижнем регистре сподчеркивает между словами, поэтому я бы посоветовал переименовать ваши функции в asset_detail_view и asset_list_view.

...