Wednesday, February 11, 2015

Django file browser doesn't work django-filebrowser

django-filebrowser and grapelli
django-grappelli provides a revamp of the existing django admin look-and-feel. In itself, it simply makes your site look better – you’ll need this in case a site also needs to provide admin access to the product owner. For this case, however, we’re using grappelli as a dependency for django-filebrowser.
django-filebrowser does exactly what its name says. In a nutshell, django-filebrowser lets you navigate through and manipulate your media files through your django admin site. This is useful should you eventually need the end-user to be able to control image files without having to dig deep into the server’s internal filesystem.
First, make sure the dependencies are installed. PIL may prove tricky to install, but from there it’s all simple.
  • pip install django==1.2
  • pip install PIL==1.1.7
  • pip install django-grappelli=2.1
  • pip install django-filebrowser==3.1
You’ll be able to follow these steps, except for the ‘collectstatic’ management command (since we’re using Django 1.2) http://django-grappelli.readthedocs.org/en/latest/quickstart.htmlAlso, I used these additional settings:
Note: the PROJECT_ROOT style makes your settings more portable, so it’s a good habit to start.
Next, we make a symbolic link to the grappelli media folder (in site-packages) from your project media folder.(In the directory defined by MEDIA_ROOT)ln —symbolic /PATH/TO/site_packages/grappelli/media grappelli
Then, make sure your installed apps has this order:
Same goes for your urls,
(In the directory defined by MEDIA_ROOT)
Indicate in additional settings using this as reference:http://code.google.com/p/django-filebrowser/wiki/Settings
Once you’re set up, check it out with the following url:/admin/filebrowser/browse/

I have installed Django file browser and added grappelli and filebrowser to my installed apps. And did every thing said in documention but when I browse http://127.0.0.1:8000/admin/filebrowser/ I got 404 page not found error. What's the problem? I configured my media settings like this:
# Media files
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/admin/'
FILEBROWSER_DIRECTORY = '/media/'

2 answers

  • answered 2014-02-11 17:59 frnhr
    Just solved the exact same problem, and it's the oldest one in the book: permissions (facepalm)
    • make sure your media dir is chmod-ed to 755
    • create media/uploads dir and also chmod it to 755
    In settings.py, I don't use the FILEBROWSER_DIRECTORY (I guess that uploads is the default)
    I really think that throwing 400 Bad Request is utterly useless and anoying, but oh well...

    Just a related note: I don't think there is anything at /admin/filebrowser/, it just gives me a 404. Please correct me it I'm missing something here :)

  • answered 2014-02-11 17:59 pryma
    The problem is your FILEBROWSER_DIRECTORY setting. It should have absolute path.
    Unfortunately, the error is hidden by the nasty 400 Bad Request, as explained in this ticket.
Django] #21668: Invalid upload_to attribute results in hard-to-debug "Bad Request" 400 error.
12 posts by 1 author
Django
12/25/13
#21668: Invalid upload_to attribute results in hard-to-debug "Bad Request" 400 error. -------------------------------+--------------------      Reporter:  GDorn          |      Owner:  nobody          Type:  Bug            |     Status:  new     Component:  Uncategorized  |    Version:  1.6      Severity:  Normal         |   Keywords:  Triage Stage:  Unreviewed     |  Has patch:  0 Easy pickings:  0              |      UI/UX:  0 -------------------------------+--------------------  It's admirable that django tries to prevent files from being uploaded  outside of MEDIA_ROOT.  However, the documentation for file uploads  (https://docs.djangoproject.com/en/dev/topics/http/file-uploads/) doesn't  make this requirement clear, and getting it wrong results in several  layers of useful error messages getting eaten by a generic message  instead. It starts with django.utils._os.safe_join raising a ValueError if the  upload_to path isn't within MEDIA_ROOT.  This has a useful message payload  showing both paths and why the exception happened.  This message isn't  logged.
 However, django.core.files.storage.FileSystemStorage.path immediately  catches that exception, eats the message, and raises a much more generic  SuspiciousFileOperation, containing the desired path but no explanation of  what went wrong.
 Finally, django.core.handlers.base.BaseHandler.get_response catches that  SuspiciousOperation, logs the message (good if you have logging turned on,  which many users do not), eats the exception and returns a 400 response  instead.
 All the user sees is "400 Bad Request", no traceback and certainly not the  original and useful ValueError message.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.



Django
12/25/13
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. (was: Invalid upload_to attribute results in hard-to-debug "Bad Request" 400 error.)
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. -------------------------------+--------------------------------------
     Reporter:  GDorn          |                    Owner:  nobody          Type:  Bug            |                   Status:  new     Component:  Uncategorized  |                  Version:  1.6
     Severity:  Normal         |               Resolution:      Keywords:                 |             Triage Stage:  Unreviewed     Has patch:  0              |      Needs documentation:  0   Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+-------------------------------------- Changes (by GDorn): * needs_better_patch:   => 0  * needs_docs:   => 0  * needs_tests:   => 0
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:1>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.

Django
12/25/13
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. -------------------------------+--------------------------------------
     Reporter:  GDorn          |                    Owner:  nobody          Type:  Bug            |                   Status:  new     Component:  Uncategorized  |                  Version:  1.6
     Severity:  Normal         |               Resolution:      Keywords:                 |             Triage Stage:  Unreviewed
    Has patch:  0              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+--------------------------------------Comment (by anonymous):
 Potentially related #19866
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:2>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.


Django
3/16/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. -------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:  nobody          Type:                       |                   Status:  new   Cleanup/optimization               |                  Version:  1.6     Component:  HTTP handling        |               Resolution:      Severity:  Normal               |             Triage Stage:      Keywords:                       |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+------------------------------------- Changes (by timo): * cc: timo (added)  * component:  Uncategorized => HTTP handling  * type:  Bug => Cleanup/optimization
Comment:
 There may be some room for improvement here. How/why did you manage to  attempt to upload a file outside of `MEDIA_ROOT`?
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:3>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.



Django
3/18/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. -------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:  nobody
         Type:                       |                   Status:  new   Cleanup/optimization               |                  Version:  1.6     Component:  HTTP handling        |               Resolution:      Severity:  Normal               |             Triage Stage:      Keywords:                       |  Unreviewed     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------Comment (by GDorn):
 I was attempting to simulate the upload as part of a unit test.  As I  didn't want the test polluting my actual uploads directory, I was  attempting to use @override_settings to change the upload path.  The  resulting error was very hard to diagnose.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:4>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.


Django
3/28/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. --------------------------------------+------------------------------------      Reporter:  GDorn                 |                    Owner:  nobody          Type:  Cleanup/optimization  |                   Status:  new     Component:  Documentation         |                  Version:  1.6      Severity:  Normal                |               Resolution:      Keywords:                        |             Triage Stage:  Accepted
    Has patch:  0                     |      Needs documentation:  0
  Needs tests:  0                     |  Patch needs improvement:  0
Easy pickings:  0                     |                    UI/UX:  0
--------------------------------------+------------------------------------ Changes (by timo): * component:  HTTP handling => Documentation  * stage:  Unreviewed => Accepted
Comment:
 I think improving the documentation is the best way forward.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:5>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.



Django
5/18/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error. -------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:          Type:                       |  anubhav9042   Cleanup/optimization               |                   Status:  assigned
    Component:  Documentation        |                  Version:  1.6      Severity:  Normal               |               Resolution:      Keywords:                       |             Triage Stage:  Accepted     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+------------------------------------- Changes (by anubhav9042): * status:  new => assigned  * owner:  nobody => anubhav9042
Comment:
 Working on this in my GSoC project.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:6>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.



Django
5/26/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
-------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:          Type:                       |  anubhav9042   Cleanup/optimization               |                   Status:  assigned     Component:  Documentation        |                  Version:  1.6      Severity:  Normal               |               Resolution:      Keywords:                       |             Triage Stage:  Accepted     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------Comment (by timo):
 Actually, it appears that this raised a more informative error message in  Django 1.3 (see #22706). We should see if that's possible to restore.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:7>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.


Django
6/17/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
-------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:          Type:                       |  anubhav9042   Cleanup/optimization               |                   Status:  assigned
    Component:  Documentation        |                  Version:  master
     Severity:  Normal               |               Resolution:      Keywords:                       |             Triage Stage:  Accepted     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+------------------------------------- Changes (by anubhav9042): * version:  1.6 => master
Comment:
 Since this appears to be a problem in not getting the correct message, I  am going to fix this alongwith #22058.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:8>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.



Django
6/23/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
-------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:          Type:                       |  anubhav9042   Cleanup/optimization               |                   Status:  assigned     Component:  Documentation        |                  Version:  master      Severity:  Normal               |               Resolution:      Keywords:                       |             Triage Stage:  Accepted     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------Comment (by timo):
 This regressed in 1.6 with this commit:  https://github.com/django/django/commit/d228c1192ed59ab0114d9eba82ac99df611652d2  #diff-dbd7d9159676b15fc9a096b0adb919e9R173
 I think we should consider returning a `technical_500_response` in the  handling of `SuspiciousOperation` as we did before if `settings.DEBUG is  True` rather than invoking `handler400`.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:9>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.



Django
6/24/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
-------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:          Type:                       |  anubhav9042   Cleanup/optimization               |                   Status:  assigned     Component:  Documentation        |                  Version:  master      Severity:  Normal               |               Resolution:      Keywords:                       |             Triage Stage:  Accepted     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------Comment (by timo):
 Yes, that's the idea. Please add a test. A mention in the release notes  also wouldn't hurt. I'd also consider adding a `status_code` kwarg to  `technical_500_response` so we can continue returning a `400` in this  case.
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:10>
Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines.


Django
6/24/14
Re: [Django] #21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
#21668: Invalid upload_to FileField attribute results in hard-to-debug "Bad Request" 400 error.
-------------------------------------+-------------------------------------      Reporter:  GDorn                |                    Owner:          Type:                       |  anubhav9042
  Cleanup/optimization               |                   Status:  closed     Component:  Documentation        |                  Version:  master      Severity:  Normal               |               Resolution:  fixed
     Keywords:                       |             Triage Stage:  Accepted     Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+------------------------------------- Changes (by Tim Graham ): * status:  assigned => closed  * resolution:   => fixed
Comment:
 In [changeset:"dbbcfca476e29354c3a5c6221112b55741babc14"]:  {{{  #!CommitTicketReference repository=""  revision="dbbcfca476e29354c3a5c6221112b55741babc14"  Fixed #21668 -- Return detailed error page when SuspiciousOperation is  raised and DEBUG=True
 Thanks GDorn and gox21 for report.
 Thanks Tim Graham for idea and review.  }}}
-- Ticket URL: <https://code.djangoproject.com/ticket/21668#comment:11>

No comments:

Post a Comment