类视图和函数视图哪个更好?
使用get_absolute_url还是slugify?
如何使用for以及是否在菜单中显示类别?
有些问题真的很令人困惑,不可能理解哪种方式是最好的
views.py:
class ProductView(ListView):
template_name = 'main/Html/html_components.html'
model = Product
class ProductCategoryView(DetailView):
model = ProductCategory
字符串
网址:
urlpatterns = [
path('', ProductView.as_view(), name='Product'),
path('category/', ProductCategoryView.as_view(), name='category-detail'),
# path('<int:pk>/', ProductCategoryView.as_view(), name='category-detail'),
# path('category/<slug:slug>/', ProductCategoryView.as_view(), name='category-detail'),
]
型
html:
html(for循环)
{% load static %}
<nav class="menu__main">
<ul class="menu">
{% for ProductCategory in ProductCategory %}
<li class="single">
<a href="" class="single__link">
<span class="single__text">{{ ProductCategory.title }}</span>
</a>
</li>
<li class="dropdown">
<a href="javascript:void(0);" class="active dropdown__link">
<span class="dropdown__text">Forms</span>
<svg class="dropdown__arrow"><use href="#arrow-down"></use></svg>
</a>
<ul class="dropdown__list">
<li class="dropdown__list__item">
<a href="" class="dropdown__list__link">
<span class="dropdown__list__text">Checkbox</span>
</a>
</li>
<li class="dropdown__list__item">
<a href="" class="dropdown__list__link">
<span class="dropdown__list__text">Radio</span>
</a>
</li>
</ul>
</li>
{% endfor %}
</ul>
</nav>
型
models:py
class ProductCategory(models.Model):
title = models.CharField(max_length=100, null=False, blank=False, unique=True, verbose_name='Title')
slug = models.SlugField(max_length=300, blank=True, unique=True, verbose_name='slug')
create_date = models.DateTimeField(auto_now_add=True, verbose_name='Create Date')
class Meta:
verbose_name = 'Category'
def __str__(self):
return self.title
class Product(models.Model):
title = models.CharField(max_length=200, null=False, blank=False, unique=True, verbose_name='Title')
slug = models.SlugField(max_length=300, allow_unicode=True, null=False, blank=False, unique=True, verbose_name='slug')
category = models.ForeignKey('ProductCategory', null=True, blank=True, db_index=True, on_delete=models.CASCADE, verbose_name='Category Parent')
class Meta:
verbose_name = 'Product'
def __str__(self):
return self.title
型
请告诉我速度和优化的最佳解决方案?
1条答案
按热度按时间u5i3ibmn1#
更好是一个相对的术语。在速度和优化方面,就像在系统性能方面一样,基于类的视图和函数式视图之间没有真实的区别。
哪一个是正确的可能取决于你打算做什么。
如果你只是想尽快启动和运行一组基本的CRUD页面,基于类的视图将帮助你用更少的代码实现。
如果你想了解Django以及它是如何工作的,我建议你先学习函数式视图,因为它们使视图对初学者来说更容易阅读。这将帮助你欣赏基于类的视图带来的好处。最终,你可能最终会使用混合视图,所以了解每种方法的部分和模式,优点和缺点将是一个优势。
slug是一行可读的文本,可以用作URL的一部分,所以你可以使用
use mysite.com/product/big-chest-of-drawers
而不是mysite.com/product/324
。这是一种对搜索引擎有用的方法,有时也是安全的方法(因为你不能简单地通过输入id号来浏览像Users这样的对象。get_absolute_url是一个附加到模型的方法,这样你就可以简单地调用它来获得一个moedl示例的正确链接。
为了将两者结合起来,如果您的urls.py有:
字符串
你可以在你的模型中使用:
型
然后调用你的模板:
型
现在,如果你想改变URL模式,你只需要改变前两行,每个模板仍然会在你的网站上显示正确的URL。
最后,模板中的for和ifs是这样工作的-确保For变量与Queryset的名称不同:
型