Isn't it rough to retrieve flatpages via get_flatpages template tag from its url instead of a page identifier?

StackOverflow https://stackoverflow.com/questions/14147984

質問

As you can read on the django reference or hacking a bit, get_flatpages can be used as follow:

{% get_flatpages as flatpages %}
{% get_flatpages for someuser as flatpages %}
{% get_flatpages '/about/' as about_pages %}
{% get_flatpages prefix as about_pages %}
{% get_flatpages '/about/' for someuser as about_pages %}

So, if I want to get a specific page I need to do it via its url or a prefix, which is somewhat rough, because my template code become data dependant, I meant, if I change the url of certain flat page then it is necessary to change my template code too.

A more flexible idea would be including an identifier to each page, addable through e.g. the 'Advanced options' section, so that the page can be refered via its identifier, thus we could do something like this:

{% get_flatpages 'about' as about_pages %}

Which is more flexible and less data dependant, no matter what url the page has, note we could change the page's url without changing the template code.

Is there something like that in the framework?, of course I could customize this app or to use a third-party app, but this isn't the point ;-)

Have you any other idea to deal with?

役に立ちましたか?

解決

No, I don't believe there's any support for what you're asking for in Django at present. The docs you linked to for flatpages say:

A flatpage is a simple object with a URL, title and content. Use it for one-off, special-case pages, such as “About” or “Privacy Policy” pages, that you want to store in a database but for which you don’t want to develop a custom Django application.

My reading of this is "this is the bare minimum we're providing, and if you want any more you'll have to code it yourself". I agree that your proposal of allowing pages to be referred to by a symbolic name (which perhaps defaults to their URL) is more flexible, but you're probably better off raising an issue for it or discussing on the mailing list than hoping a dev happens upon your question on StackOverflow.

In the short term, you could look at some of the pre-built CMS-like Django apps. Django-page-cms is relatively lightweight (it's a relatively small app itself but does have a bunch of dependencies) and you could accomplish what you're after: each page is referred to by its slug (aka url / name), but you can define aliases / redirects to given pages for arbitrary URLs.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top