Veuillez noter: Juste pour clarifier '[app_name]' est un espace réservé pour le nom réel de l'application. Pas de code de substitution Django. Imaginez juste qu'il dit «Stuff» au lieu de [app_name], si c'est confus.Django DRY - comment simplifier des vues similaires en utilisant le même template?
Ma question:
- Comment puis-je le rendre plus sec?
Il y a beaucoup de répétitions de code, et il doit y avoir un moyen d'unifier certaines d'entre elles. Si vous répondez, je serais vraiment reconnaissant si vous écrivez explicitement quoi et pourquoi. Comme beaucoup de réponses supposent pas mal de connaissances et j'essaie de bonnes habitudes dans le style et la pratique du codage Django. Merci pour votre temps.
[app_name] /urls.py
from django.conf.urls import url
from . import views
app_name = 'things'
urlpatterns = [
url(r'^cars/$', views.CarThingIndexView.as_view(), name='Car_index'),
url(r'^trees/$', views.TreeThingIndexView.as_view(), name='Tree_index'),
....
]
[app_name] /model.py
from django.db import models
class Tree(models.Model):
"""
Tree
"""
name_text = models.CharField(max_length=200)
def __str__(self):
return self.name_text
class Car(models.Model):
"""
Car
"""
name_text = models.CharField(max_length=200)
def __str__(self):
return self.name_text
[app_name] /view.py
from django.views import generic
from inventory.models import Car, Tree
class CarThingIndexView(generic.ListView):
template_name = '[app_name]/index.html'
context_object_name = 'thing_list'
def get_queryset(self):
return Car.objects.values()
class TreeThingIndexView(generic.ListView):
template_name = '[app_name]/index.html'
context_object_name = 'thing_list'
def get_queryset(self):
return Tree.objects.values()
[APP_NAME]/modèle/[APP_NAME] index.html
{% extends '[app_name]/base.html' %}
{% block content %}
{% if thing_list %}
<ul>
{% for item in thing_list %}
<li>
<p>
{{ item }}
</p>
</li>
{% endfor %}
</ul>
{% else %}
<!-- I am pretty sure if there are no objects this will not work, please correct me if I am wrong {{ obj | get_class_name }}. I would like it to read "No Tree/Car are available." -->
<p>No [class_name] are available.</p>
{% endif %}
{% endblock content %}