首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 2.0动态生成2.0模式

Django 2.0动态生成2.0模式
EN

Stack Overflow用户
提问于 2017-12-26 20:25:29
回答 1查看 2.9K关注 0票数 2

我编写了从数据库动态生成url模式的代码。这些urls只有一个级别路径:domain.com/something

someapp/models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

这个解决方案是反模式的吗?如果是的话,为什么?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-26 21:16:33

是的,你的解决方案是反模式的。Django支持URL模式中的参数,这些参数被捕获并在相应的视图中可用。使用这些URL参数,您可以为数据库中的每个特定类型的记录编写和维护单个URL模式。

看一看这个例子参数。

最后,还请注意,您的解决方案可能会有很差的性能,因为您可能会根据数据库的大小创建数百万个URL模式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47983384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档