我有一個RoutingUrl模型,該模型描述了我的站點上使用的所有url以及必須管理url和其他一些路由信息的視圖(View模型的外鍵)。這些網址的規模不斷擴大,並且還應該支持重定向。這些模型都或多或少如下:django中的動態url路由
class RoutingUrl(models.Model):
url = models.CharField(unique=True, verbose_name='routing url')
crc_checksum = models.IntegerField(editable=False)
redirect_to = models.ForeignKey('RoutingUrl', related_name='redirect_from', blank=True, null=True)
view = models.ForeignKey(View, related_name='routing_urls')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class View(models.Model):
name = models.CharField()
的RoutingUrl還包含有關頁面信息模型的通用外鍵渲染(不同機型都有獲得支撐,這是一般的原因外鍵)。
現在的問題是:如何實現這樣一個動態路由到Django?我的感覺是,我有兩個選擇:
- 我可以創建一箇中間件將採取通過實現process_request方法(因此是檢查URL模式之前)調度請求到右視圖的照顧。顯然這樣的中間件應該放置在中間件堆棧的底部,以便維護其他中間件的功能。這個解決方案將繞過Django路由系統。
- 另一種選擇可能是添加一個匹配所有內容的單個catch全部urlpattern,然後將我自己的處理程序/調度程序作爲視圖編寫。該處理程序實現路由過程,因此將調用相應的視圖並返回其HttpResponse
你能建議我哪兩個選項是最好的實現這樣的路由?當然,如果有第三種更好的選擇,不要猶豫,向我建議。