def _get_absolute_url(): try: site = current_site() if site == self.section.site: return reverse_app( ( f"{site.id}-blog-{self.namespace.name}-{self.category}", f"{site.id}-blog-{self.namespace.name}", f"{site.id}-blog-{self.category}", f"{site.id}-blog", ), "article-detail", kwargs={"slug": self.slug}, languages=[self.language_code], ) with set_current_site(self.section.site): site = self.section.site return ("//" + self.section.site.host + reverse_app( [ f'{site.id}-blog-{self.namespace.name}-{self.category or ""}', f"{site.id}-blog-{self.namespace.name}", f'{site.id}-blog-{self.category or ""}', f"{site.id}-blog", ], "article-detail", urlconf=apps_urlconf(), kwargs={"slug": self.slug}, languages=[self.language_code], )) except NoReverseMatch: return "#"
def get_absolute_url(self): site = current_site() if self.section.site == site: return reverse_app( (f"{self.section.site_id}-people", ), "team-detail", kwargs={"pk": self.pk}, ) with set_current_site(self.section.site): return ("//" + self.section.site.host + reverse_app( [f"{self.section.site.id}-people"], "team-detail", urlconf=apps_urlconf(), kwargs={"pk": self.pk}, ))
def render(self, context): args = [arg.resolve(context) for arg in self.args] kwargs = {k: v.resolve(context) for k, v in self.kwargs.items()} namespaces = self.namespaces.resolve(context) view_name = self.view_name.resolve(context) fallback = kwargs.pop("fallback", None) if not isinstance(namespaces, (list, tuple)): namespaces = namespaces.split(",") # Try to look up the URL. If it fails, raise NoReverseMatch unless the # {% reverse ... as var %} construct is used, in which case return # nothing. url = "" try: url = apps.reverse_app( namespaces, view_name, args=args, kwargs=kwargs, current_app=self._current_app(context), ) except apps.NoReverseMatch: if fallback is not None: url = fallback elif self.asvar is None: raise if self.asvar: context[self.asvar] = url return "" else: if context.autoescape: url = conditional_escape(url) return url
def create(request): page = page_for_app_request(request) page.activate_language(request) campaign = page.campaign form = TestimonialForm(campaign=campaign) if request.POST: form = TestimonialForm(request.POST, request.FILES, campaign=campaign) if form.is_valid(): form.save() return redirect(reverse_app(f"testimonials-{campaign.pk}", "index")) return render( request, page.template_key, { "form": form, "campaign": campaign, "page": page, "regions": Regions.from_item( page, renderer=renderer, timeout=60, inherit_from=page.ancestors().reverse(), ), }, )
def get_absolute_url(self): try: site = current_site() if not self.section or site == self.section.site: return reverse_app([f"{site.pk}-events"], "location-detail", kwargs={"slug": self.slug}) with set_current_site(self.section.site): return ("//" + self.section.site.host + reverse_app( [f"{self.section.site.id}-events"], "location-detail", urlconf=apps_urlconf(), kwargs={"slug": self.slug}, )) except NoReverseMatch: return "#"
def get_absolute_url(self): try: site = current_site() return reverse_app([f"{site.id}-people"], "person-detail", kwargs={"pk": self.pk}) except NoReverseMatch: return ""
def get_absolute_url(self): site = current_site() try: return ( reverse_app( [f"{site.id}-glossary"], "glossary", languages=[self.language_code], ) + f"#{self.slug}" ) except: return "#"
def get_absolute_url(self): site = current_site() try: return reverse_app( (str(site.id) + "-categories",), "category-detail", languages=[self.language_code], kwargs={"slug": self.slug}, ) except NoReverseMatch: return "#"
def _get_absolute_url(): try: site = current_site() if site == self.section.site: return reverse_app( [ f"{site.id}-events-{self.category}", f"{site.id}-events", ], "event-detail", urlconf=apps_urlconf(), kwargs={ "slug": self.slug, "day": self.start_date.day, "month": self.start_date.month, "year": self.start_date.year, }, languages=[self.language_code], ) with set_current_site(self.section.site): return ("//" + self.section.site.host + reverse_app( [ f"{self.section.site.id}-events-{self.category}", f"{self.section.site.id}-events", ], "event-detail", urlconf=apps_urlconf(), kwargs={ "slug": self.slug, "day": self.start_date.day, "month": self.start_date.month, "year": self.start_date.year, }, languages=[self.language_code], )) except NoReverseMatch: return "#"
def index(request): page = page_for_app_request(request) page.activate_language(request) campaign = page.campaign testimonials = campaign.testimonial_set.filter(public=True, validated=True) create_url = reverse_app(f"testimonials-{campaign.pk}", "create") paginator = Paginator(testimonials, 27) page_number = request.GET.get("page", 1) page_obj = paginator.get_page(page_number) ancestors = list(page.ancestors().reverse()) return render( request, page.template_key, { "campaign": campaign, "page_obj": page_obj, "page": page, "meta_tags": meta_tags([page] + ancestors, request=request), "create_url": create_url, "regions": Regions.from_item( page, renderer=renderer, timeout=60, inherit_from=page.ancestors().reverse(), ), }, )
def get_absolute_url(self): """ This is the trickiest bit of this whole project. reverse_app is a simple wrapper around feincms3.apps.reverse_any, which is exactly the same as django.core.urlresolvers.reverse with the small difference that it accepts a list of viewnames and returns the first result where no NoReverseMatch exception is raised. The viewnames tried in sequence by reverse_app are (assuming that the project is configured with german, english and french as available languages, and french as active language, and assuming that the current article is a publication): - fr.publications.article-detail - fr.articles.article-detail - de.publications.article-detail - de.articles.article-detail - en.publications.article-detail - en.articles.article-detail - Otherwise, let the NoReverseMatch exception bubble. reverse_app tries harder returning an URL in the correct language than returning an URL for the correct app. Better show a PR publication on the blog page than switching languages. """ return reverse_app( (self.category, 'articles'), 'article-detail', kwargs={ 'year': self.publication_date.year, 'slug': self.slug, }, )
def get_absolute_url(self): return reverse_app( (self.category, "articles"), "article-detail", kwargs={"pk": self.pk} )
def get_absolute_url(self): return reverse_app( (self.category, 'articles'), 'article-detail', kwargs={'pk': self.pk}, )
def get_absolute_url(self): return reverse_app((f'blog-{self.namespace.slug}', ), 'article-detail', kwargs={'slug': self.slug}, languages=[self.language_code])
def test_apps(self): """Article app test (two instance namespaces, two languages)""" home_de = Page.objects.create( title="home", slug="home", path="/de/", static_path=True, language_code="de", is_active=True, menu="main", ) home_en = Page.objects.create( title="home", slug="home", path="/en/", static_path=True, language_code="en", is_active=True, menu="main", ) for root in (home_de, home_en): for app in ("blog", "publications"): Page.objects.create( title=app, slug=app, static_path=False, language_code=root.language_code, is_active=True, application=app, parent_id=root.pk, ) for i in range(7): for category in ("publications", "blog"): Article.objects.create(title="%s %s" % (category, i), category=category) self.assertContains(self.client.get("/de/blog/all/"), 'class="article"', 7) self.assertContains(self.client.get("/de/blog/?page=2"), 'class="article"', 2) self.assertContains( self.client.get("/de/blog/?page=42"), 'class="article"', 2, # Last page with instances (2nd) ) self.assertContains( self.client.get("/de/blog/?page=invalid"), 'class="article"', 5, # First page ) response = self.client.get("/de/blog/") self.assertContains(response, 'class="article"', 5) response = self.client.get("/en/publications/") self.assertContains(response, 'class="article"', 5) set_urlconf(apps_urlconf()) try: article = Article.objects.order_by("pk").first() with override("de"): self.assertEqual(article.get_absolute_url(), "/de/publications/%s/" % article.pk) with override("en"): self.assertEqual(article.get_absolute_url(), "/en/publications/%s/" % article.pk) # The german URL is returned when specifying the ``languages`` # list explicitly. self.assertEqual( reverse_app( (article.category, "articles"), "article-detail", kwargs={"pk": article.pk}, languages=["de", "en"], ), "/de/publications/%s/" % article.pk, ) finally: set_urlconf(None) response = self.client.get("/de/publications/%s/" % article.pk) self.assertContains(response, "<h1>publications 0</h1>", 1) # The exact value of course does not matter, just the fact that the # value does not change all the time. self.assertEqual(apps_urlconf(), "urlconf_fe9552a8363ece1f7fcf4970bf575a47")