Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Django绝对url在html模板中不起作用_Python 3.x_Url_Django Views_Breadcrumbs_Django 2.1 - Fatal编程技术网

Python 3.x Django绝对url在html模板中不起作用

Python 3.x Django绝对url在html模板中不起作用,python-3.x,url,django-views,breadcrumbs,django-2.1,Python 3.x,Url,Django Views,Breadcrumbs,Django 2.1,在我发布这个问题之前,我尝试了几种解决方案,但没有vien,可能是因为我在django和web开发方面经验不足。 我想在面包卷导航菜单中显示课程名称。但是,它显示空白。使用Django 2.1.4,模型如下所示: class Course(model.Model): title = models.CharField(max_length=128) description = RichTextUploadingField(default='No description availa

在我发布这个问题之前,我尝试了几种解决方案,但没有vien,可能是因为我在django和web开发方面经验不足。 我想在面包卷导航菜单中显示课程名称。但是,它显示空白。使用Django 2.1.4,模型如下所示:

class Course(model.Model):
    title = models.CharField(max_length=128)
    description = RichTextUploadingField(default='No description available.')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('course-detail', kwargs={'pk': self.pk})
class Lesson(models.Model):
    title = models.CharField(max_length=512)
    content = RichTextUploadingField()
    course = models.ManyToManyField(Course)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('lesson-detail', kwargs={'pk': self.pk})
编辑:添加课程模型 课程模式与课程有多对多的关系。详情如下:

class Course(model.Model):
    title = models.CharField(max_length=128)
    description = RichTextUploadingField(default='No description available.')

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('course-detail', kwargs={'pk': self.pk})
class Lesson(models.Model):
    title = models.CharField(max_length=512)
    content = RichTextUploadingField()
    course = models.ManyToManyField(Course)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('lesson-detail', kwargs={'pk': self.pk})
views.py包含以下视图

class CourseListView(ListView):
    model = Course
    template_name = 'courses/courses.html'
    context_object_name = 'courses'
    paginate_by = 10


class CourseDetailView(DetailView):
    model = Course
    template_name = 'courses/course-detail.html'

class LessonDetailView(DetailView):
    model = Lesson
    template_name = 'courses/lesson-details.html'
URL模式包括以下内容:

path('', CourseListView.as_view(), name = 'course-list'),

path('course/<int:pk>/', CourseDetailView.as_view(), name = 'course-detail'),

path('lesson/<int:pk>/', LessonDetailView.as_view(), name = 'lesson-detail'),
我怎样才能让它工作?课程标题为“音乐”,所需的输出看起来像
HOME/COURSES/music/fleet
。我想能够在网站的几个地方包括课程的url,包括运行文本


非常感谢您的帮助

LessonDetailView
没有任何超能力,它无法猜测您想要在模板上下文中有一个
课程
实例,也无法猜测您想要哪个实例。因此,模板无法解析名称
course
,并且确实会吐出一个空字符串

好消息是,假设您的
课程
模型(您忘记发布)在
课程
上有外键,即:

class Lesson(models.Model):
    course = models.ForeignKey(Course, ....)
    # etc
然后您可以从
课程
实例中获取相关课程实例,即:

<li class="breadcrumb-item">
  {% with course=lesson.course %}
  <a href="{{ course.get_absolute_url }}">{{course.title}}</a></li>
  {% endwith %}
</li> 
当然,将模板重置为初始版本

编辑2:


我忘了这将中断
课程。获取\u absolute\u url()
,因为您依赖于了解当前课程,这在本文中是不可能的。解决方案非常简单,就是从
课程
模型中删除此方法(实际上,一个模型对url一无所知),并替换对
课程的所有调用。通过调用
django.core.urlResolver.reverse
(在python代码中)或它与
{%url%}
模板标记同级来获取绝对url()(在模板中).

desthuillier,谢谢你的帮助。我尝试了你的建议,但仍然显示空白。可能是因为模型有多对多关系,需要不同的解决方案。请扩展你的帮助。@Mohammed,这就是为什么你应该在问题中发布相关代码的原因-这避免了浪费每个人的时间。。。我真的很抱歉。我为此道歉。同时,我感谢您宝贵的时间和帮助。请确保您下次在问题中发布所有相关上下文…因此,我根据您的真实模型编辑了我的答案-但如上所述,这是未经测试的代码,可能无法正常工作(但这应该会让您开始,这就是重点)。感谢@bruno_desthuilliers对您的友好帮助。我非常感谢您。我实施了第二个解决方案,发现了反向错误。我最不想面对的是反向错误(我是django的新手!).然而,我不得不使用外键将模型从多个修改为一个到多个。我尝试了你的第一个答案,效果非常神奇。感谢你花时间帮助我。你真是一个救世主。非常感谢你。
class LessonDetailView(DetailView):
    model = Lesson
    template_name = 'courses/lesson-details.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        course = self.object.courses.get(pk=kwargs["course_id"])
        context["course"] = course
        return context