开发者

Django: Should I use Query Strings or clean url's to map display parameters? And how?

开发者 https://www.devze.com 2023-03-12 09:34 出处:网络
I have the following urlconf: urlp开发者_Python百科atterns = patterns(\'page.manager.views\', url(r\'^$\', \'pages\', name=\'page_manager-pages\'),

I have the following urlconf:

urlp开发者_Python百科atterns = patterns('page.manager.views',
    url(r'^$', 'pages', name='page_manager-pages'),
    url(r'^add/$', 'add_page', name='page_manager-add_page'),
    url(r'^(?P<page_id>\d+)/', include(object_patterns)),    
)

The 'pages' view must return an object list of all pages. The user will be offered several display/search options through a side menu: - created: any/ past 6hours/12hours/24hours/week - Status: any/ status_1/status_2/status_3 - Duration: any / duration_1/duration_2/duration_3 etc.

These options are used to select which values should be presented to the user and can be used in combination, eg: created=any, status=status_1, duration=duration_1

My question is, how best to achieve this in Django?

What I have so far: I can subclass a generic view for list objects, creating a view which takes the arguments(created, status, duration, etc) and provides the proper queryset(with the chosen[or default] ordering options passed along with the other arguments).

To pass these arguments, query strings seem to be right for this, since we are selecting from a resource(the list of all pages). Yes/no?

I'm also aware we get this information from request.GET.get('argument_name').

But how to create the links for the search options? eg: any, any/ status_1/status_2/status_3. We need to know which are already active, so...template tag? An easier way perhaps?

Is this the proper solution to handle this type of thing in Django, or is there a better way?


Since you have discrete, optional and unordered pieces of knowledge contributing to your query, I think that GET is the best way. Also, note that request.GET is a dict (ergo, you can do request.GET['status']).

As for the search options, I'd say a template tag and a context variable might either be appropriate depending on the details of your view. My most likely approach is to populate a context dict with True / False flags for which need to be displayed and then have {% if %} blocks to sort it out in the template.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号