Django 2.0 slug urls.py 意外关键字参数“slug”

Posted

技术标签:

【中文标题】Django 2.0 slug urls.py 意外关键字参数“slug”【英文标题】:Django 2.0 slug urls.py unexpected keyword argument 'slug' 【发布时间】:2018-08-07 22:59:24 【问题描述】:

该网站非常简单,只有 3 页,主页和 urls.py 中显示的第二个 url 效果很好,但是当我从主题转到单元页面时,我得到了:

/subjects/units/english 处的类型错误

units() 得到一个意外的关键字参数“slug”

我不知道为什么会出现此错误.. django 2.0 在 url 和路径中所做的新修改我阅读了文档但我不明白<slug> 部分很好,, 是@ 987654322@ 我不明白,第一个和第二个是什么意思??? .. 在模板文件夹中% url 'units' item.slug % 单位是路径的名称,但是是 -- 项目。蛞蝓——对吗??如果有人向我解释,我将不胜感激。

models.py

class Unit(models.Model):
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
    name = models.CharField(max_length=250)
    description = models.TextField(blank=True, null=True)
    archived = models.BooleanField(default=False)
    slug = models.SlugField(max_length=250, unique=True)
    created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    updated = models.DateTimeField(auto_now=True, null=True, blank=True)
    seo_name = models.CharField(max_length=60, blank=True, null=True)
    seo_description = models.CharField(max_length=165, blank=True, 
    null=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Unit, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

views.py

from django.http import HttpResponse
from django.template import loader
from .models import Subject, Unit, Lesson

def units(request):
    all_units = Unit.objects.filter(active=True).order_by('-id')[:]
    template = loader.get_template('sheets/units.html')
    context = 
        'all_units': all_units
    
    return HttpResponse(template.render(context, request))

urls.py

from django.urls import path
from .views import subjects, units, lessons

urlpatterns = [
    path('subjects/', subjects, name='subjects'),
    path('units/<slug:slug>', units, name='units'),
    path('lessons/<slug:slug>', lessons, name='lessons'),
]

units.html

    <div class="blog-posts">
        <div class="row  text-center">
            % for item in all_units %
                <div class="col-sm-4 wow fadeInUp animated" data-wow-duration="1000ms" data-wow-delay="400ms"
                     style="visibility: visible;animation-duration: 1000ms;animation-delay: 400ms;animation-name: fadeInUp; margin-bottom: 15px">
                    <div class="post-thumb">
                        <a href="#"><img class="img-responsive" src="/static/img/blog/1.jpg" ></a>
                    </div>
                    <div class="entry-header">
                        <h3><a href="% url 'units' item.slug %"> item.name </a></h3>
                        <span class="date"> item.created </span>
                    </div>
                    <div class="entry-content">
                        <p> item.description|truncatechars:120 </p>
                    </div>
                </div>
            % endfor %
        </div>
    </div>

【问题讨论】:

path('units/&lt;slug:slug&gt;', ... 的意义何在?在您看来units 您不使用slug。你到底想达到什么目标? 【参考方案1】:
def units(request,slug):
    all_units = Unit.objects.filter(active=True).order_by('-id')[:]
    template = loader.get_template('sheets/units.html')
    context = 
        'all_units': all_units
    
    return HttpResponse(template.render(context, request))

您还需要在视图函数中传递 slug,因为您在 url 中提到了一个名为 slug 的参数

【讨论】:

你能写吗?? ,, 还是这个领域的新手:/ 对不起,我已经将它添加到函数中。只需复制我提供的功能 不需要从views.py文件的某个地方导入slug吗?? 不,只需在视图中输入您在 url 参数中使用的相同名称,您不需要导入任何内容 omg Thxxx Aloot man

以上是关于Django 2.0 slug urls.py 意外关键字参数“slug”的主要内容,如果未能解决你的问题,请参考以下文章

django-allauth login_redirect 页面,用户名为 slug

没有使用 slug_pattern 反向匹配 django

Django slug 更改 URL 但没有获得详细视图

Python的Django框架完成一个完整的论坛(2.urls.py配置静态文件)

Slug 没有在 Django 2.0 中呈现详细信息页面

在 Django 1.6 中使用另一个 url slug 从视图重定向到另一个 html 页面