<p>它实际上取决于结构或您的URL和您的“自定义调度规则”,但在许多情况下,您可以使用URL遍历而不是URL分派来实现您想要的。由于URL遍历使用父资源的<code>__getitem__</code>方法,您可以在其中编写普通的Python代码,因此它可能会给您带来更大的灵活性。在</p>
<p>示例:假设您有以下URL:</p>
<pre><code>/food/banana
/food/potato
/food/tomato
/food/apple
</code></pre>
<p>你想对水果和蔬菜有不同的看法。你可以这样做:</p>
^{pr2}$
<p>然后可以注册<code>FruitResource</code>和<code>VegetableResource</code>的视图:</p>
<pre><code>@view_config(context=FruitResource):
def view_fruit(context, request):
...
@view_config(context=VegetableResource):
def view_vegetable(context, request):
...
</code></pre>
<p>您可以为水果和蔬菜注册不同的视图集,因此<code>/foor/banana/make_jam</code>和{<cd5>}将仅是水果的有效URL,对于蔬菜,您将有,例如,<code>/food/potato/make_soup</code>:</p>
<pre><code>@view_config(context=FruitResource, name="make_jam"):
def view_fruit_make_jam(context, request):
...
@view_config(context=VegetableResource, name="make_soup"):
def view_vegetable_make_soup(context, request):
...
</code></pre>
<p>那么您的<code>FruitResource</code>和<code>VegetableResource</code>可以有它们自己的<code>__getitem__</code>方法,因此您可以有潜在的不同的“子项”集<code>/food/banana/skin</code>,<code>/food/banana/flesh</code>等,并为它们分配各自的视图-<code>/food/banana/skin/peel</code>,<code>/food/banana/flesh/eat</code>,其中{<cd14>}和{<cd15>}是为假想的{<cd16>}和{<cd17>}注册的视图。在</p>
<p>而且您可以对水果和蔬菜具有自定义权限,因此访问<code>/food/apple/make_jam</code>可能需要一个权限,<code>/food/potato/make_soup</code>可能需要另一个权限。在</p>