Reputation:
I am working on an online school project, I just linked subjects, with classes so when you click on a class you get it's subjects page, and in the subject page there are lessons(lessons use IDs not slugs), My problem is at linking the lesson URL in the HTML page
so my question is How to link lessons to materials(subjects) in the HTML page?
My codes:
HTML PAGE:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Name</title>
<link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
<div>
<nav>
<div class="logo"><img src="/static/images/Logo.png" width=50px></div>
<ul class="navul">
<li class="navli"><a class="nava" href="404.html">حول الموقع</a></li>
<li class="navli"><a class="nava" href="404.html">المكتبة</a></li>
<li class="navli"><a class="nava" href="404.html">الدورات</a></li>
<li class="navli"><a class="nava" href="/classes">الصفوف</a></li>
<li class="navli"><a class="nava" href="/">الصفحة الرئيسية</a></li>
</ul>
</nav>
<div class="div1">
<img src="/static/images/Logo.png" width="90" class="logo2">
<h1 class="t1">المواد </h1>
</div>
<div class="cardrow">
{% for material in material.all %}
<div class="cardcolumn">
{% for Lesson in Materials.vedio_set.all %}
<a href="{% url 'vedio' lesson.id %}" > lesson1</a>
{% endfor %}
<div class="card">
<img class="imgcls" src="{{ material.image.url }}">
<h1>{{ material.title }}</h1>
</div>
</a>
{% endfor %}
</div>
</div>
</div>
</body>
</html>
MODELS.py:
from django.db import models
from users.models import *
# Create your models here.
class Class(models.Model):
image= models.ImageField(upload_to="images")
name= models.CharField(max_length=200, default=1)
title= models.CharField(max_length=200)
def __str__(self):
return self.title
class Material(models.Model):
name= models.CharField(max_length=200, default=1)
title= models.CharField(max_length=200)
classes= models.ForeignKey(Class, default=1, on_delete=models.SET_DEFAULT)
def __str__(self):
return self.name
class Lesson(models.Model):
slug=models.SlugField()
video=models.FileField(upload_to="videos", default="")
title=models.CharField(max_length=200)
description=models.TextField()
thumbnail=models.ImageField(upload_to="images")
Material=models.ForeignKey(Material, default=1, on_delete=models.SET_DEFAULT)
allowed_membrship=models.ManyToManyField(Membership)
def __str__(self):
return self.title
VIWES.py:
from django.shortcuts import render, get_object_or_404
from .models import Class, Material, Lesson
# Create your views here.
def home(request):
Classes= Class.objects
return render(request, 'classes/index.html', {"class":Classes})
def classes(request):
Classes= Class.objects
return render(request, 'classes/Classes.html', {"class":Classes})
def materials(request, classes_id):
theclass= get_object_or_404(Class, pk=classes_id)
Materials = Material.objects.all()
context = {
'classes': theclass,
'material': Materials
}
return render(request, 'classes/Materials.html', context)
def vedio(request, lesson_id):
theMaterial=get_object_or_404(Material, pk=lesson_id)
theLesson=Lessons.objects.all
context={
'Material': theMaterial,
'Lesson':theLesson
}
return render(request, 'classes/Lesson.html', context)
URLS:
from django.contrib import admin
from django.urls import path
import classrooms.views
import users.views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', classrooms.views.home),
path('classes', classrooms.views.classes),
path('classes/<int:classes_id>', classrooms.views.materials, name="material"),
path('signup', users.views.signup, name="signup"),
path('login', users.views.login, name="login"),
path('logout', users.views.logout, name="logout"),
path('class/<int:classes_id>/<int:lessson_id>', classrooms.views.vedio, name="lessons")
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
I think I got some typical errors, sorry
Membership is in another app, I don't think you need it. this is it, Hope Understand me Well, thank you
Upvotes: 0
Views: 44
Reputation: 24089
Based on what is happening here:
def materials(request, classes_id):
theclass= get_object_or_404(Class, pk=classes_id)
Materials = Material.objects.all()
context = {
'classes': theclass,
'material': Materials
}
return render(request, 'classes/Materials.html', context)
In Materials.html
you can reverse access via Material.lesson_set.all()
:
<p> classes_id: {{ classes.id }} <p>
{% for lesson in material.lesson_set.all() %}
<p><a href="{% url 'lessons' classes.id lesson.id %}">{{ lesson.title }}</a></p>
<p>
<a href="{{ lesson.file.url }}">{{ lesson.file.url }}</a>
{{ lesson.description }}
</p>
{% endfor %}
Also look into:
Some of the variables are really confusing with mixed capitalization.
Upvotes: 1