Advertisement
Guest User

Untitled

a guest
Dec 27th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.30 KB | None | 0 0
  1. Django не находит путь, который я указал. Путь вида /title/number. Сколько не гуглил, решения не нашел. В ошибке по пути /title/number "Field 'number' expected a number but got 'dd'." В ошибке ниже в kwargs получены же нужные значения, почему тогда url принял dd, а не "1"?
  2.  
  3. callback
  4. <function ChapterDetail at 0x000001ECD1EC9F78> callback_args
  5. () callback_kwargs {'number': '1', 'slug': 'dd'} middleware_method
  6. <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x000001ECD2074D88>> request <WSGIRequest: GET '/dd/1/'> response
  7. None self
  8. <django.core.handlers.wsgi.WSGIHandler object at 0x000001ECD17BE7C8> wrapped_callback
  9. <function ChapterDetail at 0x000001ECD1EC9F78>
  10.  
  11. Как дать понять django, что я хочу путь /title/number ?
  12.  
  13. models.py
  14.  
  15. class MangaTitle(models.Model):
  16. STATUS_COMPLETED = "completed"
  17. STATUS_IN_PROGRESS = "in_progress"
  18. STATUS_TRANSLATE = (
  19. (STATUS_IN_PROGRESS, "Продолжается"),
  20. (STATUS_COMPLETED, "Завершен")
  21. )
  22. STATUS_TITLE = (
  23. (STATUS_IN_PROGRESS, "Продолжается"),
  24. (STATUS_COMPLETED, "Завершен")
  25. )
  26. name = models.CharField(max_length=255, verbose_name="Название тайтла")
  27. second_name = models.CharField(max_length=255, verbose_name="Альтернативное название")
  28. status_translate = models.CharField(max_length=100, verbose_name="Статус перевода", choices=STATUS_TRANSLATE,
  29. default=STATUS_IN_PROGRESS)
  30. status_title = models.CharField(max_length=100, verbose_name="Статус тайтла", choices=STATUS_TITLE,
  31. default=STATUS_IN_PROGRESS)
  32. total_views = models.PositiveIntegerField(verbose_name="Число просмотров", default=0)
  33. total_chapter = models.PositiveIntegerField(verbose_name="Число глав", default=0)
  34. date_of_release = models.DateTimeField(verbose_name="Дата выпуска", default=timezone.now)
  35. genre = models.ForeignKey(MangaGenre, verbose_name="Жанр", on_delete=models.CASCADE)
  36. slug = models.SlugField(unique=True, blank=True, null=True)
  37. descriptions = models.TextField(verbose_name="Описание тайтла", blank=True, null=True)
  38. img = models.ImageField(verbose_name="Изображение", upload_to="cover/")
  39. author_title = models.ForeignKey(Author, verbose_name="Автор", on_delete=models.CASCADE)
  40. artist_title = models.ForeignKey(Artist, verbose_name="Художник",
  41. on_delete=models.CASCADE,
  42. default=author_title.name)
  43. category = models.ForeignKey(Category, verbose_name="Категория", on_delete=models.CASCADE, null=True, blank=True)
  44.  
  45. def save(self, *args, **kwargs):
  46. self.slug = translit_slug(self.name)
  47. super().save(*args, **kwargs)
  48.  
  49. def get_absolute_url(self):
  50. return reverse("book_detail", kwargs={"slug":self.slug})
  51.  
  52. # def get_absolute_url(self):
  53. # get_manga_url(self, "product_detail")
  54.  
  55. def __str__(self):
  56. return self.name
  57.  
  58.  
  59. class Chapter(models.Model):
  60. title = models.ForeignKey(MangaTitle, verbose_name="Тайтл", on_delete=models.CASCADE)
  61. name = models.TextField(verbose_name="Название главы", blank=True, null=True)
  62. number = models.PositiveIntegerField(verbose_name="Номер главы")
  63. # id = models.AutoField(primary_key=True)
  64. slug = models.SlugField(verbose_name="Ссылка на главу", null=True, blank=True)
  65. chapter_zip = models.FileField(verbose_name="Архив главы", blank=True, null=True, upload_to="zipChapter/")
  66.  
  67. class Meta:
  68. unique_together = [["title", "slug"]]
  69.  
  70. def __str__(self):
  71. return f"{self.title} - {self.number} - {self.name}"
  72.  
  73. def save(self, *args, **kwargs):
  74. self.slug = self.number
  75. if self.chapter_zip:
  76. # extract_zip_to_model(self.chapter_zip, self.title, self.number)
  77. test(self.chapter_zip, self.title, self.number)
  78. super().save(*args, **kwargs)
  79.  
  80. def get_absolute_url(self):
  81. return reverse("chapter_detail", kwargs={"number": self.slug})
  82. urls.py
  83.  
  84. from django.contrib import admin
  85. from django.urls import path, include, re_path
  86. from .views import Base, ChapterRead, ChapterDetail
  87.  
  88. extra_patterns = [
  89. #path("<str:url>/", ChapterRead.as_view(), name="chapter-read"),
  90. path("", ChapterDetail.as_view(), name="chapter_detail"),
  91.  
  92. ]
  93.  
  94.  
  95.  
  96. urlpatterns = [
  97. path("", Base.as_view(),name="book_list"),
  98. path("<str:slug>/", ChapterRead.as_view(), name="book_detail"),
  99. path("<str:slug>/<str:number>/", include(extra_patterns))
  100. #path("<str:slug>/<int:number>/", ChapterDetail.as_view(), name="chapter_detail")
  101. ]
  102. views.py
  103.  
  104. from django.shortcuts import render, get_object_or_404
  105. from django.views.generic import DetailView, View
  106. from .models import *
  107.  
  108.  
  109. # Create your views here.
  110.  
  111.  
  112. class Base(View):
  113. def get(self, request, *args, **kwargs):
  114. manga = MangaTitle.objects.all()
  115. return render(request, "base.html", context={"manga": manga})
  116.  
  117.  
  118. class ChapterRead(DetailView):
  119. model = MangaTitle
  120. context_object_name = "manga"
  121. template_name = "chapter.html"
  122. slug_field = "slug"
  123.  
  124. def get_context_data(self, **kwargs):
  125. context = super().get_context_data(**kwargs)
  126. context["chapter"] = Chapter.objects.filter(title=self.object)
  127. return context
  128.  
  129.  
  130. class ChapterDetail(DetailView):
  131. model = Chapter
  132. context_object_name = "chapter"
  133. template_name = "chapter_read.html"
  134. slug_field = "number"
  135.  
  136. def get_context_data(self, **kwargs):
  137. context = super().get_context_data(**kwargs)
  138. context["imgs"] = ImgChapter.objects.filter(chapter=self.object)
  139. return context
  140. chapter.html
  141.  
  142. <!DOCTYPE html>
  143. <html lang="en">
  144. <head>
  145. <meta charset="UTF-8">
  146. <title>Title</title>
  147. </head>
  148. <body>
  149. {{ manga.name }}
  150. {% for i in chapter %}
  151. <a href="{% url "chapter_detail" i.title.slug i.slug %}">{{ i.slug }}</a>
  152. {% endfor %}
  153. </body>
  154. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement