Esempio n. 1
0
 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 "#"
Esempio n. 2
0
 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},
         ))
Esempio n. 3
0
    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
Esempio n. 4
0
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(),
            ),
        },
    )
Esempio n. 5
0
 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 "#"
Esempio n. 6
0
 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 ""
Esempio n. 7
0
 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 "#"
Esempio n. 8
0
 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 "#"
Esempio n. 9
0
 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 "#"
Esempio n. 10
0
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(),
            ),
        },
    )
Esempio n. 11
0
    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,
            },
        )
Esempio n. 12
0
    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,
            },
        )
Esempio n. 13
0
 def get_absolute_url(self):
     return reverse_app(
         (self.category, "articles"), "article-detail", kwargs={"pk": self.pk}
     )
Esempio n. 14
0
 def get_absolute_url(self):
     return reverse_app(
         (self.category, 'articles'),
         'article-detail',
         kwargs={'pk': self.pk},
     )
Esempio n. 15
0
 def get_absolute_url(self):
     return reverse_app((f'blog-{self.namespace.slug}', ),
                        'article-detail',
                        kwargs={'slug': self.slug},
                        languages=[self.language_code])
Esempio n. 16
0
    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")