project_url_tag.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #
  2. # SPDX-License-Identifier: GPL-2.0-only
  3. #
  4. from django import template
  5. from django.urls import reverse
  6. register = template.Library()
  7. def project_url(parser, token):
  8. """
  9. Create a URL for a project's main page;
  10. for non-default projects, this is the configuration page;
  11. for the default project, this is the project builds page
  12. """
  13. try:
  14. tag_name, project = token.split_contents()
  15. except ValueError:
  16. raise template.TemplateSyntaxError(
  17. "%s tag requires exactly one argument" % tag_name
  18. )
  19. return ProjectUrlNode(project)
  20. class ProjectUrlNode(template.Node):
  21. def __init__(self, project):
  22. self.project = template.Variable(project)
  23. def render(self, context):
  24. try:
  25. project = self.project.resolve(context)
  26. if project.is_default:
  27. return reverse('projectbuilds', args=(project.id,))
  28. else:
  29. return reverse('project', args=(project.id,))
  30. except template.VariableDoesNotExist:
  31. return ''
  32. register.tag('project_url', project_url)