我编写了从数据库动态生成url模式的代码。这些urls只有一个级别路径:domain.com/something。
someapp/models.py
class SomeModel(models.Model):
pattern = models.CharField(max_length=50)
name = models.CharField(max_length=50)
text = models.CharField(max_length=50)someapp/apps.py
class SomeAppConfig(AppConfig):
name = 'someapp'
def ready(self):
from .models import SomeModel
from .urls import urlpatterns
from . import views
urls_in_db = SomeModel.objects.all()
for url_in_db in urls_in_db:
urlpatterns.append(path(url_in_db.pattern,
views.SpecialView.as_view(),
name=url_in_db.name)someapp/views.py
class SpecialView(generic.TemplateView):
template_name = 'template/view_template.html'
model = SomeModel
def get_context_data(self, **kwargs):
context = super(SpecialView, self).get_context_data(**kwargs)
context['content'] = SomeModel.objects.get(pattern=self.request.path)
return context这个解决方案是反模式的吗?如果是的话,为什么?谢谢
发布于 2017-12-26 21:16:33
是的,你的解决方案是反模式的。Django支持URL模式中的参数,这些参数被捕获并在相应的视图中可用。使用这些URL参数,您可以为数据库中的每个特定类型的记录编写和维护单个URL模式。
看一看这个例子参数。
最后,还请注意,您的解决方案可能会有很差的性能,因为您可能会根据数据库的大小创建数百万个URL模式。
https://stackoverflow.com/questions/47983384
复制相似问题