4.3. 多服务注册
4.3.1. 检索有关服务的信息
要检索有关需要构建正确注册链接的服务的所有信息,您必须通过服务对象进行循环。服务是模型对象的一部分。
{% for service in provider.services %} . . . {% endfor %}
4.3.2. 配置注册列
您已有布局和循环访问服务对象。现在,决定您要如何显示服务以及注册链接的信息。例如,通过服务描述和底部的注册链接将它们划分为列。每列将作为一门服务列框,其中包含所有必要的信息。
{% for service in provider.services %} <div class="service-column"> <p>{{ service.name }}</p> <p>{{ service.description }}</p> . . . </div> {% endfor %}
内部容器充当自定义 description 字段。service.name 是服务名称,在本例中是容器的名称。
4.3.3. 配置订阅
现在,自定义服务注册的主要部分 - 创建注册链接,提取注册 URL 和服务 ID。从 URL 的对象和服务 ID 中获取您迭代循环的服务对象的注册 URL。最终的链接代码类似如下:
<a href="{{ urls.signup }}?{{ service | toparam }}">Signup to {{ service.name }}</a>
您还必须考虑该用户可能已对某些服务进行了签名。创建要检查的条件块。
{% unless service.subscribed? %} <a href="{{ urls.signup }}?{{ service | toparam }}">Signup to {{ service.name }}</a> {% endunless %}
因此,您可以生成最终代码:
{% for service in provider.services %} <div class="service-column"> <p>{{ service.name }}</p> <p>{{ service.description }}</p> {% unless service.subscribed? %} <a href="{{ urls.signup }}?{{ service | to_param }}">Signup to {{ service.name }}</a> {% endunless %} </div> {% endfor %}
4.3.4. styling
根据您拥有的服务数量,向生成的标记添加一些最终的接触。在本例中,它有两个,因此 service-column div 的 CSS 代码将是:
.service-column { float: left; margin-left: 10%; width: 45%; } .service-column:first-child { margin-left: 0; }
在示例中,我们使用了基于百分比的布局动态分配包含不v 的尺寸上列的宽度。
现在,您应该有一个正常工作并正确忽略多个服务订阅页面。祝贺您!
如果您要以特定顺序显示列,请尝试使用条件表达式(if/else/case)条件服务名称或其他值。