2017-12-26 3 views
0

データベースからURLパターンを動的に生成するこのコードを記述しました。これらのURLには、レベルパスが1つだけあります(domain.com/something)。Django 2.0は動的にURLパターンを生成します

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 

は番目です解決策はアンチパターンですか?そしてもしそうなら、なぜですか? ありがとう

答えて

1

はい、あなたのソリューションは反パターンです。 Djangoはキャプチャされ、対応するビューで利用可能になるURLパターンのパラメータをサポートしています。これらのURLパラメータを使用すると、データベース内の特定のタイプのすべてのレコードに対して単一のURLパターンを作成して管理できます。

URLパラメータのthis exampleを見てください。

最後に、データベースのサイズに応じて数百万のURLパターンを作成する可能性があるため、ソリューションのパフォーマンスが低下する可能性があることにも注意してください。

+0

あなたの答えをありがとう! – Greg

+0

うれしい私は助けることができました! – ndmeiri

関連する問題